Sponsored Content
Special Forums UNIX and Linux Applications Infrastructure Monitoring diffrence between method call and function call in perl Post 302302002 by KevinADC on Sunday 29th of March 2009 06:02:06 PM
Old 03-29-2009
Just guessing....

After cleaning up this sloppy code to make it readable you can see that $result[0] has the chance of never being defined:

Code:
rrequire "/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 $idpstatus{'ENABLE_IPS'};
   if( $idpstatus{'ENABLE_IPS'} ){
      $result[0] = 'on';
      if( $idpstatus{'POLICY'} eq "default" ){
         $result[1] = "Default";
      }
      elsif ($idpstatus{'POLICY'} eq "alert"){
         $result[1] = "Alert";
      }
      else {
         $result[1] = "Action";
      }
   }
   elsif ($idpstatus{'ENABLE_IPS'} eq 'off'){
      $result[0] = 'off';
   }
   print $result[0]
}
&System_Status_Main_Service_Status_Intrusion_Prevention();

You should add a fall-through condition to the end of the if/elsif block to make sure $result[0] will always be defined:

Code:
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 $idpstatus{'ENABLE_IPS'};
   if( $idpstatus{'ENABLE_IPS'} ){
      $result[0] = 'on';
      if( $idpstatus{'POLICY'} eq "default" ){
         $result[1] = "Default";
      }
      elsif ($idpstatus{'POLICY'} eq "alert"){
         $result[1] = "Alert";
      }
      else {
         $result[1] = "Action";
      }
   }
   elsif ($idpstatus{'ENABLE_IPS'} eq 'off'){
      $result[0] = 'off';
   }
   else { #<-- fall-through condition 
      $result[0] = 'unknown status';
   }
   print $result[0]
}
&System_Status_Main_Service_Status_Intrusion_Prevention();


Last edited by KevinADC; 03-29-2009 at 07:07 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

perl function call tracking

Assuming the following code sub foo { dosomething {...} else { foo } is the number of times foo has been called kept track of internally and how could I access that count? (1 Reply)
Discussion started by: thumper
1 Replies

2. Shell Programming and Scripting

function call

can I call a function in bash script just as in C++ while do function() done function() thanks, Steffen (3 Replies)
Discussion started by: forever_49ers
3 Replies

3. Shell Programming and Scripting

Recursive method call getting terminated ???

Hello people, Need help !!! What am I doing wrong here ? I am writing a function to recursively list the files under a folder and it's sub-folders. Problem is once it list the files under the innermost folder, it terminates. What do I need to do so that it returns and list files under the... (3 Replies)
Discussion started by: tipsy
3 Replies

4. Programming

Help with a function call

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)
Discussion started by: Stevhp
6 Replies

5. Shell Programming and Scripting

call function

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)
Discussion started by: Jamil Qadir
4 Replies

6. Shell Programming and Scripting

function call

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)
Discussion started by: kamel.seg
2 Replies

7. Shell Programming and Scripting

Function Call

Hi, I have a string corresponding to a function. How I can call that function without if statement? Thanks in advance. (4 Replies)
Discussion started by: Zaxon
4 Replies

8. Shell Programming and Scripting

Function call

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)
Discussion started by: kojo
12 Replies

9. Emergency UNIX and Linux Support

Perl error: Can't call method "value" on an undefined value

Hi, I am running a perl script to automate a process and I keep running into a error can't find the "value" Can't call method "value" on an undefined value at process_file.pl line 44. file is CVS cell is ifdfdxrfmp.ksh Here is the script I have also attached it as well: ... (2 Replies)
Discussion started by: vpundit
2 Replies

10. Shell Programming and Scripting

How to Call a Function

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)
Discussion started by: nanthagopal
2 Replies
Context::Preserve(3)					User Contributed Perl Documentation				      Context::Preserve(3)

NAME
Context::Preserve - run code after a subroutine call, preserving the context the subroutine would have seen if it were the last statement in the caller SYNOPSIS
Have you ever written this? my ($result, @result); # run a sub in the correct context if(!defined wantarray){ some::code(); } elsif(wantarray){ @result = some::code(); } else { $result = some::code(); } # do something after some::code $_ += 42 for (@result, $result); # finally return the correct value if(!defined wantarray){ return; } elsif(wantarray){ return @result; } else { return $result; } Now you can just write this instead: use Context::Preserve; return preserve_context { some::code() } after => sub { $_ += 42 for @_ }; DESCRIPTION
Sometimes you need to call a function, get the results, act on the results, then return the result of the function. This is painful because of contexts; the original function can behave different if it's called in void, scalar, or list context. You can ignore the various cases and just pick one, but that's fragile. To do things right, you need to see which case you're being called in, and then call the function in that context. This results in 3 code paths, which is a pain to type in (and maintain). This module automates the process. You provide a coderef that is the "original function", and another coderef to run after the original runs. You can modify the return value (aliased to @_) here, and do whatever else you need to do. "wantarray" is correct inside both coderefs; in "after", though, the return value is ignored and the value "wantarray" returns is related to the context that the original function was called in. EXPORT
"preserve_context" FUNCTIONS
preserve_context { original } [after|replace] => sub { after } Invokes "original" in the same context as "preserve_context" was called in, save the results, runs "after" in the same context, then returns the result of "original" (or "after" if "replace" is used). If the second argument is "after", then you can modify @_ to affect the return value. "after"'s return value is ignored. If the second argument is "replace", then modifying @_ doesn't do anything. The return value of "after" is returned from "preserve_context" instead. Run "preserve_context" like this: sub whatever { ... return preserve_context { orginal_function() } after => sub { modify @_ }; } or sub whatever { ... return preserve_context { orginal_function() } replace => sub { return @new_return }; } Note that there's no comma between the first block and the "after =>" part. This is how perl parses functions with the "(&@)" prototype. The alternative is to say: preserve_context(sub { original }, after => sub { after }); You can pick the one you like, but I think the first version is much prettier. AUTHOR AND COPYRIGHT
Jonathan Rockway "<jrockway@cpan.org>" Copyright (c) 2008 Infinity Interactive. You may redistribute this module under the same terms as Perl itself. perl v5.18.2 2008-01-15 Context::Preserve(3)
All times are GMT -4. The time now is 05:24 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy