Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Array Filter and Lookahead

by thundergnat (Deacon)
on Nov 20, 2012 at 17:25 UTC ( #1004760=note: print w/ replies, xml ) Need Help??


in reply to Array Filter and Lookahead

Update: added intermediate variables.

my @test = ( "text text text 1 text", "1 text text text 2 text 3 ", "text 1 text text 2 text", "text text text 1 text 2 3.0", "1 2 3 4 5 6 7 8 9 10 11", "text text text text" ); my @filtered = map {/(\d+)(?:\.0*)?\D*$/; $1} @test; print join "\n", @filtered;
yields:
1
3
2
3
11

Or possibly, depending on your needs, something like:

my @filtered = map {/(\d+(?:\.\d*)?)\D*$/; 0 + $1 || ''} @test; print join "\n", @filtered;


Comment on Re: Array Filter and Lookahead
Select or Download Code
Re^2: Array Filter and Lookahead
by AnomalousMonk (Abbot) on Nov 20, 2012 at 19:51 UTC

    The solutions you propose have various problems:

    • handling a number like 3.0, of which daugh016 seems to want to capture only the integer portion;
    • handling 0;
    • and the problem of having capture variables undefined if a match fails (or else having the value of these variables persist from a previous match).

    Here is a possible solution avoiding those problems:

    >perl -wMstrict -le "my @test = ( 'text text text 1 text', '1 text text text 2 text 3 ', 'text 1 text text 2 text', 'text text text 1 text 2 3.0', '1 2 3 4 5 6 7 8 9 10 11', 'text 0', 'text 3.1', 'text text text text', ); ;; 'Zonk' =~ m{ (\w+) }xms; ;; my @filtered = map {/(\d+)(?:\.0*)?\D*$/; $1} @test; printf qq{'$_' } for @filtered; print qq{\n}; ;; @filtered = map {/(\d+(?:\.\d*)?)\D*$/; 0 + $1 || ''} @test; printf qq{'$_' } for @filtered; print qq{\n}; ;; @filtered = map { m{ (\d+) (?: [.] \d*)? \D* \z }xms ? $1 : '' } @test ; printf qq{'$_' } for @filtered; print qq{\n}; " '1' '3' '2' '3' '11' '0' '1' 'Zonk' Argument "Zonk" isn't numeric in addition (+) at -e line 1. '1' '3' '2' '3' '11' '' '3.1' '' '1' '3' '2' '3' '11' '0' '3' ''

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1004760]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2015-07-06 07:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (70 votes), past polls