> This works and does what I want it to:
> 
> perl -e '@x = split("\\.", "a.b.c"); print $x[0];'
> 
> Why does not this work?
> perl -e 'print  @{split("\\.", "a.b.c")}[0];'
> 
> Is there a compact way to take a slice of a split (or other function that
> returns an array) without creating a temporary variable?
> 
>    Thanks,
>       Siegfried
> 

Sometimes when working out this kind of detail it is helpful to make a
full script and activate strict/warnings. In the above case you get the
following,

> perl -Mstrict -w -e 'print  @{split("\\.", "a.b.c")}[0];'
Use of implicit split to @_ is deprecated at -e line 1.
Can't use string ("3") as an ARRAY ref while "strict refs" in use at -e
line 1.

Essentially C<split> returns a list, the construct C<@{ }> is a way to
slice into a hash, which you don't have. So you need to slice into a
list, which in this case is done like,

perl -Mstrict -w -e 'print  ((split("\\.", "a.b.c"))[0]);'

Notice the extra set of parens, otherwise you get a syntax error because
C<print> would otherwise use the first set as an argument list.

HTH,

http://danconia.org

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to