[Solved] Perl, Deep recursion? exit() ignored?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [Solved] Perl, Deep recursion? exit() ignored?
# 1  
Old 02-19-2014
[Solved] Perl, Deep recursion? exit() ignored?

Hi all,

I am calling a subroutine which checks if a log file is writeable and if not, prints something stdout and also log something into the same file, which doesn't work neither of course.
Anyway, there is enough exit() calls, that should stop it working, but the problem is, that I get the message about the file permissions (which I set on intent to produce the problem) in and infinite loop, though there is no loop calling the functions.

In all these thousands lines of messages I found inbetween this hint:

Code:
Deep recursion on subroutine "main::log_me" at /opt/somepath/someprog line 230.
Deep recursion on subroutine "main::print_err" at /opt/somepath/someprog line 256.

These two functions are here:

Code:
  +233  sub debug {
  +234          ($package, $filename, $line) = caller();
  +235          print "Package:  $package\n";
  +236          print "Filename: $filename\n";
  +237          print "Line:     $line\n";
  +238
  +239          ## Debugging function
  +240          if( $_debug eq lc("on") ){
  +241                  if( ! open( FH_LOG, ">> $W_LOG" ) ){
  +242                          my $err_msg = sprintf("ERROR: Can not write log file [ $W_LOG ]: %s", $!);
  +243                          &print_err($err_msg);
  +244                          &log_me($the_end);
  +245                          exit(3);
  +246                  }
  +247                  print FH_LOG "DEBUG -- @_\n";
  +248                  close(FH_LOG);
  +249          }
  +250  }
  +251

Code:
  +252  sub log_me {
  +253          ## Logging function
  +254          if( ! open( FH_LOG, ">> $W_LOG" ) ){
  +255                  my $err_msg = sprintf("ERROR: Can not write log file [ $W_LOG ]: %s", $!);
  +256                  &print_err($err_msg);
  +257                  &log_me($the_end);
  +258                  exit(3);
  +259          }
  +260          print FH_LOG "$date -- @_\n";
  +261          close(FH_LOG);
  +262  }

It should at least hit that exit(3); in log_me(), but it doesn't. Instead I get this spam of messages.

As you can see in the head of debug() I added caller() to get a clue which is calling it. It showed me it is this line:

Code:
  +374  &debug("=====> Rotating logs ...");

... which is in the main part of the program and neither in a loop.


Thanks for any hint in forward!



Edit:
I removed the calls of log_me() in both functions because it made no sense of course. Though difference to the original problem.

Last edited by zaxxon; 02-19-2014 at 11:23 AM.. Reason: added info
# 2  
Old 02-19-2014
Well, I am not a perl expert. But in your log_me function you detect that the logfile cannot be opened so you call log_me again.

This second invocation of log_me will also detect that the logfile cannot be opened so it will call log_me again.

This third invocation of log_me will also detect that the logfile cannot be opened so it will call log_me again.

And so on.

Shouldn't actually be infinite though. Each iteration consumes a bit more stack. Try letting it run for a few minutes. You gotta blow the stack sooner or later.
This User Gave Thanks to Perderabo For This Post:
# 3  
Old 02-19-2014
Yep saw those useless lines and removed them (edited 1st post), but there is no difference in the behaviour.
# 4  
Old 02-19-2014
I'm concerned about this: $W_LOG

In shell, that would effectively become ${W}_LOG, not ${W_LOG}. Try bracketing it like the latter.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 02-19-2014
@Corona: Changed it, still no difference.
# 6  
Old 02-19-2014
I got it, print_err() has also a call to log_me(), which kept it in that loop. Didn't see that for more than an hour...

Thanks a lot all for having a look into. In the end the problem sits in front of the keyboard, as usual Smilie Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Perl: trap signal 'exit': why I am not able to have it work??

First time trying to work with signals in Perl. Reviewing example I try it, but not able to get it work for 'exit'. I hope, I am correct, assuming, that the ending any code by exit $return_code; the $SIG{EXIT} should be de-referenced and processed?! So, I have such code, that, I assume,... (5 Replies)
Discussion started by: alex_5161
5 Replies

2. Shell Programming and Scripting

[Solved] Rsh does not close connection on exit

Dear all, We have a service that we start up remotely with rsh but unfortunately, the rsh never returns to the calling server. This seems to be because the processes of the service we've just started hold the port open.RBATTE1 @ /home/RBATTE1>netstat -na|grep 49.51 tcp4 0 0 ... (1 Reply)
Discussion started by: rbatte1
1 Replies

3. Shell Programming and Scripting

Perl Question Grep and exit status

Im being forced to write in perl. I prefer KSH or Expect, so I suppose its time to become more fluent with perl. I have the following problem. I want to loop through Filea and check that each line in Filea is resident in Fileb. Filea contents two four six eight houseboat Fileb... (4 Replies)
Discussion started by: sumguy
4 Replies

4. UNIX for Dummies Questions & Answers

[Solved] Simple while loop does not exit

spath="/home/user/k/${1}" dpath="/home/user/seq/Nov17/${1}" cd $dpath ls -1 $spath > list c=1 while read list newlist=`echo $list | sed 's/.gz//' ` newnewlist=`echo $newlist | sed 's/.fastq//' ` do echo $c echo $list c=$(($c+1)) (6 Replies)
Discussion started by: analyst
6 Replies

5. HP-UX

[Solved] ssh debug1: Exit status 254 problem

Hello; Am experiencing odd problem with ssh: ========= ssh -vvv remote_host : : debug2: channel 0: rcvd adjust 65536 debug2: channel_input_status_confirm: type 99 id 0 debug2: shell request accepted on channel 0 debug1: client_input_channel_req: channel 0 rtype exit-status reply 0... (4 Replies)
Discussion started by: delphys
4 Replies

6. Shell Programming and Scripting

Perl | catching the letter 'Q' for exit.

Hi all, I made a simple script with a prompt menu in Perl. All working good, but I want to add an option while the program is running that on every time when the user press 'Q' the program will exit. I know I can use $SIG{'INT'} or any other %SIG option. This option is a unix signal which I... (3 Replies)
Discussion started by: RedGrinGo
3 Replies

7. Shell Programming and Scripting

exit ststus 9 from perl system command

HI all, can anyone tell me what does exit status 9 from perl's system function meant. I am using system fuction to execute a shell script as : my $s=system ('script.sh' ,arg1 ,arg2); print $s; the output is 9. Thanks in advance. !!:confused: (1 Reply)
Discussion started by: glamo_2312
1 Replies

8. Shell Programming and Scripting

How to get exit status codes in bash from Perl?

I apologize if I have already posted this query. I scanned back quite a few pages but could not find such a query. If my perl code contains "exit(33)" how can I get that value in bash for use in a "if" statement. Thanks, Siegfried (5 Replies)
Discussion started by: siegfried
5 Replies

9. Shell Programming and Scripting

recursion too deep

I am running a korn shell script which has a recursive function. The script ran for 117 iterations and ended up with the following error "recursion too deep". what should be done to avert this? Thanks in advance Swamy p.s. I am on UNIX MPRAS V4 (3 Replies)
Discussion started by: swamy455
3 Replies

10. Shell Programming and Scripting

PERL: Trapping EXIT

Hey Everyone, Just starting with PERL (5.8.2) after years of KSH. Is there a way to trap the exit as you can in KSH (i.e., "trap EXIT_SCRIPT EXIT")? Thanks in advance for any help, gsatch (4 Replies)
Discussion started by: gsatch
4 Replies
Login or Register to Ask a Question