Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Change variable multiple times within a single string?

by AnomalousMonk (Abbot)
on Apr 27, 2013 at 19:58 UTC ( #1031010=note: print w/ replies, xml ) Need Help??


in reply to Change variable multiple times within a single string?

Another possibility:

>perl -wMstrict -le "for my $s (qw( B111 B111B111 B111B111B111 A111 A111A111 A111A111A111 A111B111 A111B111A111 A111B111A111B111 A111B111A111B111A111 B111A111 B111A111B111 B111A111B111A111 B111A111B111A111B111 B BB BBB A AA AAA BA BAB AB ABA xxx xx x), '', ) { local our $y_n; ()= $s =~ m{ ([AB]) (?{ $y_n = $^N eq 'A' ? 'yes' : 'no' }) }xmsg; if (defined $y_n) { printf qq{%3s: '%s' \n}, $y_n, $s; } else { warn qq{no A or B found in '$s'}; } } " no: 'B111' no: 'B111B111' no: 'B111B111B111' yes: 'A111' yes: 'A111A111' yes: 'A111A111A111' no: 'A111B111' yes: 'A111B111A111' no: 'A111B111A111B111' yes: 'A111B111A111B111A111' yes: 'B111A111' no: 'B111A111B111' yes: 'B111A111B111A111' no: 'B111A111B111A111B111' no: 'B' no: 'BB' no: 'BBB' yes: 'A' yes: 'AA' yes: 'AAA' yes: 'BA' no: 'BAB' no: 'AB' yes: 'ABA' no A or B found in 'xxx' at -e line 1. no A or B found in 'xx' at -e line 1. no A or B found in 'x' at -e line 1. no A or B found in '' at -e line 1.

Update: And allowing for the possibility of side-effects (e.g., the values in the  %xlat hash could be anonymous subroutine references) (note:  //p and  ${^MATCH} only available in Perl 5.10+):

>perl -wMstrict -le "my %xlat = qw(A yes B no); ;; my $set = join '', map quotemeta, keys %xlat; $set = qr{ [$set] }xms; ;; my $xlat_keys = join ' or ', keys %xlat; ;; for my $s (qw( B111 B111B111 B111B111B111 A111 A111A111 A111A111A111 A111B111 A111B111A111 A111B111A111B111 A111B111A111B111A111 B111A111 B111A111B111 B111A111B111A111 B111A111B111A111B111 B BB BBB A AA AAA BA BAB AB ABA xxx xx x), '', ) { local our $y_n; use re 'eval'; ()= $s =~ m{ $set (?{ $y_n = $xlat{${^MATCH}} }) }xmspg; if (defined $y_n) { printf qq{%3s: '%s' \n}, $y_n, $s; } else { warn qq{no $xlat_keys found in '$s'}; } } " no: 'B111' no: 'B111B111' no: 'B111B111B111' yes: 'A111' yes: 'A111A111' yes: 'A111A111A111' no: 'A111B111' yes: 'A111B111A111' no: 'A111B111A111B111' yes: 'A111B111A111B111A111' yes: 'B111A111' no: 'B111A111B111' yes: 'B111A111B111A111' no: 'B111A111B111A111B111' no: 'B' no: 'BB' no: 'BBB' yes: 'A' yes: 'AA' yes: 'AAA' yes: 'BA' no: 'BAB' no: 'AB' yes: 'ABA' no A or B found in 'xxx' at -e line 1. no A or B found in 'xx' at -e line 1. no A or B found in 'x' at -e line 1. no A or B found in '' at -e line 1.


Comment on Re: Change variable multiple times within a single string?
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (13)
As of 2015-07-02 11:19 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 (35 votes), past polls