There's really not much wrong with your sample code, if I understand your intent correctly:
perl -E "my $string = 'abc efg hijk lmnop'; if($string !=~ m/defg/) {s
+ay $string;}"
abc efg hijk lmnop
If it does the job without side-effects, it's probably correct!
But is there some reason you couldn't have answered this yourself... or at least satisfied yourself that your code does or does not work?
Update on my oops: TY, Athanasius who pointed out my typo and, implicitly, that -E does not invoke warnings, whose use would have also pointed out my mistook. With a use warnings;<c> added to the one-liner this is evident:</p>
<c>!=~ should be !~ at -e line 1.
Use of uninitialized value $_ in pattern match (m//) at -e line 1.
Argument "abc efg hijk lmnop" isn't numeric in numeric ne (!=) at -e l
+ine 1.
With the correction, and a more generous example of strings, however, IJW:
C:\>perl -E "use warnings; my @strings = ('12345 defg', 'abc efg hijk
+lmnop', 'xyz defg abc'); for my $string(@strings) { if($string !~ m/d
+efg/) {say $string;}}"
abc efg hijk lmnop
Which just goes to say, OP had the "not much wrong" idea.
|