http://qs321.pair.com?node_id=439375


in reply to Re^3: logfile rotate w/ pass by reference
in thread logfile rotate w/ pass by reference

ok so in your sample code how does the subroutine know what variable it is receiving based off of your filename? Im ny code I have two distinct filenames I want to pass to logfile::rotate so how do I do this?
if ( ( my $dif = $dif[1] - $dif[2] ) > 199 ) { &mailme; logroll($out); if ( ( my $diff = $diff[1] - $diff[2] ) > 199 ) { &mailme; logroll($out1); sub logroll { my $logs = new Logfile::Rotate (File => ???? # <---- what is here based? Count => 10, # off of 2 diff filenames Gzip => 'lib', Dir => '/usr/local/log/old', Flock => 'yes', Persist => 'yes' ); $logs->rotate(); }

Replies are listed 'Best First'.
Re^5: logfile rotate w/ pass by reference
by Joost (Canon) on Mar 14, 2005 at 17:53 UTC
    It doesn't need to know the name of the variable that is being passed. That's whole point of having subroutine arguments in the first place.

    All your logroll function needs to know is the name of the file. The name of the file is the value of the argument. The name of the variable is not important.

    sub print_value { my $value = shift; print $value; } my $var1 = "value in var1\n"; my $var2 = "value in var2\n"; print_value($var1); print_value($var2);

    This is all documented in the perlfunc manpage.

    update: I see I mistyped the code in the previous example. Maybe my update will make it clearer. :-)