Hello rnaeye,
my $var = something; # scalar context
my ($var) = something; # list context
This is correct, but from the rest of your question it seems you understand this to mean that it is $var which is in first scalar and then list context. Actually, it is something which is evaluated in either scalar or list context. That is, in an assignment, it is the right-hand side which is evaluated in either scalar or list context; the form of the left-hand side determines the context in which the right-hand side is evaluated.
You can use wantarray in a subroutine to see this:
use Modern::Perl;
my $var1 = context('a');
my ($var2) = context('b');
say for $var1, $var2;
context($var2);
sub context
{
my $c = (defined wantarray) ?
(wantarray ? 'list' : 'scalar')
: 'void';
say '(', $_[0], '): is in ', $c, ' context';
return wantarray ? @_ : $_[0];
}
which outputs:
14:04 >perl 488_SoPW.pl
(a): is in scalar context
(b): is in list context
a
b
(b): is in void context
14:08 >
Hope that helps,
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|