What do you exactly mean by "the number of times it has been called"? A subroutine may have been called 1000 times, but one after another (not recursive); or it can be like what you have shown, a series of recursive invocations that builds up a call stack.
You can always keep track of the count yourself, but with a global (package) variable (instead of "my"), so that it keeps the value during the recursion. Simple, and it's probably more elegant than another method I can think of, below.
The following only applies to recursive invocations.
Every programming language must internally keep track of the call stack for procedural calls. However, whether that is available to you is another story.
I think you can get this sort of Perl internal information with XS. But that is too hardcore, and I don't know exactly how to do it. So forget it for now.
Probably a more approachable method is to use the caller() function.
This example is inspired by your code:
So foo(6) will invoke foo(5) all the way until foo(0), so the call stack in this context should have 7 entries. On foo(0), we trigger the printstack() function to print the call stack. We go from the caller for foo(0), i.e. foo(1) all the way back to foo(6) at the file scope. If you want to get a count, you may probably just capture $subroutine for all iterations and look for the number of entries which matches "main::foo".
Is this too verbose for a count? Yes, but this has other uses (e.g. as debugging and trace execution) which can be useful though you did not mention in your question.
Hi
I have created a function in a Shell Script test.sh
function fnTest()
{
echo "My first Method
}
I have called this function in my test.sh
cat abc.txt | grep "test"
echo " test"
fnTest
But while running the shell script i got the following error:
... (2 Replies)
Below is my script that is function properly per my conditions but I am facing one problem here that is when one function fails then Iy should not check other functions but it calls the other function too So anyone can help me how could i achieve this?
iNOUT i AM GIVING TO THE... (1 Reply)
Hi foiks
i am unable to find what is wrong in my code
mu functionality is to exit from shell when i give 99 but it is not calling function ext
Could you please correct me.
read option
if ;
then
ext
else
echo "out"
fi
function ext
{
echo "tested 99 and exit... (12 Replies)
Hello,
I have a problem with package and name space.
require "/Mehran/DSGateEngineLib/general.pl";
use strict;
sub System_Status_Main_Service_Status_Intrusion_Prevention
{
my %idpstatus;
my @result;
&General_ReadHash("/var/dsg/idp/settings",\%idpstatus);
#print... (4 Replies)
hello,
when i call function inside awk traitement it doesn't work, i don't have error execution but i don't get result and if i call the function outside awk traitement it work well..
there's something special in awk call function??
here is the example :
awk -F "," '{ {first=$1; sec=$2;... (3 Replies)
hi,
can any one help me to correct this function call.
awk -F "," '{ {first=$1; sec=$2; tro=$3;quat=$4 }
if (tro == "")
{
$3 = search "$file2" "$first" "$file3"
{print $1","$2","$3","$4} }
else
{print $1","$2","$3 $4}}' $file1 > $file
search ()
{ (2 Replies)
I have a function check_ok in my abc.sh. which return me 1 or 0 . I want to call this fuction through other shell script. this shell also send two parameter to calling function.
Can you please tell me how. I am very new in unix.
#!/bin/bash
date_equal()
{
sqlplus -silent... (4 Replies)
Hi, Can anyone help me figure out the problem I'm having with a function call?
I have a header file, which sets an enum:
typedef enum {INFO, WARNING, FATAL} Levels;
int log_event (Levels, char *fmt, ...);
..then the function is called this way:
log_event(INFO, "Message text");
... (6 Replies)