Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Useless use of string in void context at

by natxo (Scribe)
on Oct 05, 2017 at 19:56 UTC ( #1200765=perlquestion: print w/replies, xml ) Need Help??
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 (Priest) 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 (Bishop) 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 (Sage) 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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1200765]
Front-paged by Corion
help
Chatterbox?
and !@monks...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2018-07-20 18:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (439 votes). Check out past polls.

    Notices?