in reply to Calling package function returns 1, not data from function

Change:
print "$late\n";
to:
return $late;
From the return doc:
(Note that in the absence of an explicit return, a subroutine, eval, or do FILE will automatically return the value of the last expression evaluated.)
And from the print doc:
Returns true if successful.
So, your 'latest' sub is returning the value of the last expression, which is the return value of print, which is 1 (it must have successfully printed).

Replies are listed 'Best First'.
Re^2: Calling package function returns 1, not data from function
by Anonymous Monk on Dec 23, 2009 at 18:08 UTC
    #!/usr/bin/perl use warnings; use strict; sub latest { my $late = `ssh root\@10.10.21.15 'cat /usr/local/LATEST_VULN'` +; chomp($late); } print "$late\n";

    The result of above script shows as:

    <p>/Perl$ ./latest.pl Global symbol "$late" requires explicit package name at ./latest.pl li +ne 11. Execution of ./latest.pl aborted due to compilation errors.</p>

    When I use undermentioned subroutine as updated by you, it displays error like this:

    ERROR:

    ~/Perl$ ./latest.pl Global symbol "$late" requires explicit package name at ./latest.pl line 11. Execution of ./latest.pl aborted due to compilation errors.

    #!/usr/bin/perl use warnings; use strict; sub latest { my $late = `ssh root\@10.10.21.15 'cat /usr/local/qualys/LATEST +_VULNSIGS'`; chomp($late); print "$late\n"; } return $late;
    Please assist. I am sure I am doing some stupid mistake. Thanks!!!
      You didn't follow the instructions. The sub should look like:
      sub latest { my $late = `ssh root\@10.10.21.15 'cat /usr/local/LATEST_VULN'`; chomp($late); return $late; }
      Nothing else should be changed. Well, ok, one thing.
      print $lat;
      should be changed to
      print "$lat\n";
        I got the solution.