I have a text data record that comprises a variable number of 'fields'... and I would like to extract the last field from the record.

Now, I realize I could probably use a (fancy) regex... and I understand they are (often) efficient and so on... but, like a lot of people, I get intimidated by regex... so I was looking for a simpler, array-manipulation method of extracting the last item from a variable length array.

Some example code:

# $rec = " 2425 S 25 \" 6 47! 86 18 21! 87 23 23! - + -! - -! 96"; use Data::Dumper; $infile = "2425-pmpk.txt"; open(INFILE, $infile) || die("cant on $infile\n$!\n"); while ($rec = <INFILE>) { chomp($rec); next unless ($rec =~ /S 25/); $rec =~ s/^\s+//; # remove lead/trail spaces $rec =~ s/\s+$//; # DOESN'T WORK (@junk, $ads) = (split(/\s+/, $rec)); # WORKS OK # (@junk) = (split(/\s+/, $rec)); # $ads = @junk[-1]; # WORKS OK # (@junk) = (split(/\s+/, $rec)); # $idx = $#junk; # $ads = $junk[$idx]; # WORKS OK ... BUT AT THE WRONG END OF THE ARRAY # ($ads, @junk) = (split(/\s+/, $rec)); print Dumper(@junk); printf("$rec\n"); printf("%d\n", $ads); } close(INFILE);
There are a number of solutions there that I've worked-out... so I've more-or-less come up with a suitable solution... but I guess the primary question is why doesn't the following construct work:

(@junk, $ads) = (split(/\s+/, $rec));

I've looked through the perlfaq, the Camel and Ram books... and have searched through the HallowedHalls(tm) here but couldn't find anything specific..

Would appreciate any thoughts...


In reply to Non-regex Methods of Extracting the Last Field from a Record by ozboomer

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.