Karol Pal
Karol Pal

Reputation: 101

Perl: Indexing function returning array syntax

I have a question about Perl more out of curiosity than necessity. I have seen there are many ways to do a lot of things in Perl, a lot of the time the syntax seems unintuitive to me (I've seen a few one liners doing som impressive stuff).

So.. I know the function split returns an array. My question is, how do I go about printing the first element of this array without saving it into a special variable? Something like $(split(" ",$_))[0] ... but one that works.

Upvotes: 0

Views: 115

Answers (3)

Barmar
Barmar

Reputation: 780974

This should do it:

print ((split(" ", $_))[0]);

You need one set of parentheses to allow you to apply array indexing to the result of a function. The outer parentheses are needed to get around special parsing of print arguments.

Upvotes: 2

kgraney
kgraney

Reputation: 2051

Try this out to print the first element of a whitespace separated list. The \s+ regex matches one or more whitespace characters to split on.

 echo "1 2 3 4" | perl -pe 'print +(split(/\s+/, $_))[0]'

Also, see this related post.

Upvotes: 0

Jim Garrison
Jim Garrison

Reputation: 86774

You're 99% there

$ perl -de0

Loading DB routines from perl5db.pl version 1.33
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(-e:1):   0
  DB<1> $a = "This is a test"

  DB<2> $b = (split(" ",$a))[0]

  DB<3> p $b
This
  DB<4> p "'$b'"
'This'

Upvotes: 4

Related Questions