in reply to How to read the file from stdin using perl?

Hello gopikavi,

I am bit confused as the rest of the monks.

Do you mean that you want something like that? Reading STDIN and if exists inside your file while print the whole file?

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; $| = 1; # turn on autoflush my $file = 'file.txt'; open my $fh, "<", $file or die "Could not open '$file': $!"; chomp(my @files = <$fh>); close $fh or die "Coould not close '$file' $!"; while (my $stdin = <>) { chomp $stdin; last if $stdin eq ""; if ( grep { $stdin eq $_ } @files ) { print Dumper \@files; } else { print "There is no word in the $file\n"; } } __DATA__ $ perl file.pl data1 $VAR1 = [ 'data1', 'data2', 'data3', 'data4' ]; DATA1 There is no word in the file.txt

Update: Adding last if $stdin eq ""; to exit loop.

Seeking for Perl wisdom...on the process of learning...not there...yet!

Replies are listed 'Best First'.
Re^2: How to read the file from stdin using perl?
by gopikavi (Initiate) on May 09, 2017 at 11:06 UTC
    Here you had given as data1 then why it goes for else condition

      Hello again gopikavi,

      Sorry for the late reply, I got busy with something that I was working on.

      Back to your question, Here you had given as data1 then why it goes for else condition. Notice the difference between DATA1 and data1. The search that I am conducting is case sensitive. Which means if you want to be able to search for small case characters and the same time big case characters you need to convert the user input to small case characters with lc. But this is entirely up to you, it depends what you want to do and how flexible or strict the script should be.

      For example:

      #!/usr/bin/perl use strict; use warnings; use Data::Dumper; $| = 1; # turn on autoflush my $file = 'file.txt'; open my $fh, "<", $file or die "Could not open '$file': $!"; chomp(my @files = <$fh>); close $fh or die "Coould not close '$file' $!"; while (my $stdin = <>) { chomp $stdin; last if $stdin eq ""; # exit stdin if empty string if ( grep { lc $stdin eq $_ } @files ) { print Dumper \@files; } else { print "There is no word in the $file\n"; } } __DATA__ $ perl file.pl DATA1 $VAR1 = [ 'data1', 'data2', 'data3', 'data4' ]; data1 $VAR1 = [ 'data1', 'data2', 'data3', 'data4' ]; DATA100 There is no word in the file.txt

      Hope this helps.

      Seeking for Perl wisdom...on the process of learning...not there...yet!