in reply to string processing and regexp alternation...
my $C='((w)hite|(b)lack)'; my @c; my @d; while (<DATA>) { if (/$C\s+"princepawn"/i) { push @c, [ // ]; push @d, [ $1, $2 || $3 ]; } } use Data::Dumper; print Dumper(\@c); # What you said print Dumper(\@d); # ['black', 'b'] or ['white', 'w'] __DATA__ white "princepawn" foo black "princepawn"
sub popstr { substr $_[0], -1, 1, '' } # or chop sub shiftstr { substr $_[0], 0, 1, '' } sub pushstr { length($_[0] .= join '', @_[1..$#_]) } sub unshiftstr { length($_[0] = join('', @_[1..$#_]) . $_[0]) } my $string = 'testing'; my $foo = shiftstr $string; # esting my $bar = popstr $string; # estin pushstr $string, $foo; # estint unshiftstr $string, $bar; # gestint print "$string\n";
sub popstr { $_[0] =~ s/(.)\z//s; $1 } sub shiftstr { $_[0] =~ s/^(.)//s; $1 } sub pushstr { $_[0] =~ s/\z/join '', @_[1..$#_]/e; length $_[0]; } sub unshiftstr { $_[0] =~ s/^/join '', @_[1..$#_]/e; length $_[0]; } my $string = 'testing'; my $foo = shiftstr $string; # esting my $bar = popstr $string; # estin pushstr $string, $foo; # estint unshiftstr $string, $bar; # gestint print "$string\n";
|
|---|