Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re^2: How to grep exact string

by tobyink (Abbot)
on Nov 15, 2012 at 09:06 UTC ( #1003969=note: print w/replies, xml ) Need Help??

in reply to Re: How to grep exact string
in thread How to grep exact string

The behaviour of smart match on arrays may well change in Perl 5.18 or 5.20.

This works quite nicely for me...

use strict; use warnings; use File::Slurp qw( slurp ); use Syntax::Keyword::Junction qw( any ); my @first = map { lc($_) } slurp('file1.txt'); my @second = map { lc($_) } slurp('file2.txt'); chomp(@first, @second); print "Machines extra in second list...\n"; for my $machine (@second) { if ($machine eq any(@first)) { print "$machine is already there\n"; } else { print "$machine is new\n"; } }
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^3: How to grep exact string
by Kenosis (Priest) on Nov 15, 2012 at 22:14 UTC

    Wasn't familiar with Syntax::Keyword::Junction, so I appreciate seeing it used here. Also, File::Slurp's a good module to use...

    Since the OP's comparing lists, List::Compare can help find unique entries in file2.txt:

    use Modern::Perl; use File::Slurp qw/read_file/; use List::Compare; my %hash; my @file1 = map { chomp; lc } read_file 'file1.txt'; my @file2 = map { chomp; lc } read_file 'file2.txt'; my $lc = List::Compare->new( \@file1, \@file2 ); my @file2Only = $lc->get_Ronly; say for @file2Only;


    nt64osbld2 nt64osbld3 nt64oscitrix1 ntosbld4 ntosbld5 ntosbld6 vm-osw2k8x64-1 vm-osw2k8x64-2

    Not in the OP's output formatting, but that wouldn't take much more...

Re^3: How to grep exact string
by ColonelPanic (Friar) on Nov 15, 2012 at 09:34 UTC
    I think (hope!) that smart match is mature enough at this point that you can rely on its behavior not changing for such a basic case.

    Nevertheless, another way of solving the problem is always useful.

    When's the last time you used duct tape on a duct? --Larry Wall

      I imagine that Perl will continue to support the old behaviour by default and an explicit use statement will enable the new behaviour via feature. (Much like how use 5.010 enables state, say, etc.)

      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1003969]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (7)
As of 2017-07-27 20:10 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (422 votes). Check out past polls.