natxo has asked for the wisdom of the Perl Monks concerning the following question:

hi,
use strict; + use warnings; + use autodie; + my @test_svc = ( "test\@customer1.service", "test\@customer2.service", "test\@custome3.service", "test\@customer4.service", "test\@customer5.service", "test\@customer6.service", ); my @customers = qw/ customer1 customer2 customer33 customer4 customer5 + /; for my $cust (@customers) { if ( my ( $matched ) = grep $_ =~ $cust, @test_svc ) { print "$cust matches:\t $matched\n"; } else { "no matches for $cust\n"; } }
When I run it:
$ perl /tmp/kk.pl Useless use of string in void context at /tmp/kk.pl line 38. customer1 matches: test@customer1.service customer2 matches: test@customer2.service customer4 matches: test@customer4.service customer5 matches: test@customer5.service
So it correctly sees the matches, but I miss the mismatch. What is wrong with my crappy script? ;-)

TIA.

Replies are listed 'Best First'.
Re: Useless use of string in void context at
by tybalt89 (Monsignor) on Oct 05, 2017 at 20:05 UTC

    Strings don't print themselves:

    print "no matches for $cust\n";
      doh!

      Thanks ;-), time for bed now.

Re: Useless use of string in void context at
by LanX (Saint) on Oct 05, 2017 at 20:07 UTC
    > What is wrong with my crappy script? ;-)

    You don't print and Perl is warning you that it's a Useless use of string in void context giving you even the line number.

         "no matches for $cust\n";  # <--- Wot ?

    edit

    FWIW I would have collected all results in an array (and other changes improving readability)

    use strict; use warnings; use autodie; my @test_svc = ( "test\@customer1.service", "test\@customer2.service", "test\@custome3.service", "test\@customer4.service", "test\@customer5.service", "test\@customer6.service", ); my @customers = qw/ customer1 customer2 customer33 customer4 customer5 + /; for my $cust (@customers) { if ( my @matches = grep { /$cust/ } @test_svc ) { print "$cust matches:\t", (join "\t", @matches) ,"\n"; } else { print "no matches for $cust\n"; } }

    Cheers Rolf
    (addicted to the Perl Programming Language and ☆☆☆☆ :)
    Je suis Charlie!

Re: Useless use of string in void context at
by GrandFather (Saint) on Oct 05, 2017 at 20:25 UTC

    Perhaps the missing print in the else clause? You provide the string, but not print in front of it.

    Premature optimization is the root of all job security