http://www.perlmonks.org?node_id=979839


in reply to passing variables to a subroutine

my $proph=@_;

Using an array (here @_) in scalar context returns the number of elements in the array , and is not what you want.

Typical solutions are (use only one of them)

my $proph = shift; # defaults to @_ my ($proph) = @_; # list context instead my $proph = $_[0]; # be explicit about wanting the first element

See perlintro and perlsub for more details.

Replies are listed 'Best First'.
Re^2: passing variables to a subroutine
by AWallBuilder (Beadle) on Jul 04, 2012 at 09:11 UTC
    thanks for the explanation, my $proph = $_[0]; # be explicit about wanting the first element helps, I now have some other errors to try and fix

      Just to pound the point completely into the ground:

      >perl -wMstrict -le "F('success'); ;; sub F { my $scalar_context = @_; my ( $list_context ) = @_; ;; print qq{in scalar context: '$scalar_context'}; print qq{in list context: '$list_context'}; } " in scalar context: '1' in list context: 'success'