On 11-08-17 06:53 PM, Bryan R Harris wrote:


How can I do a 3-argument open on STDIN?  This doesn't work because the
3-argument open won't open STDIN when you tell it to open "-".

**************************************
@files = ("-");

for (@files) {
     print reverse readfile($_);
}

sub readfile {

     open(my $fh,"<",$_[0]) or die "$me:  Couldn't open $_[0]:  $!\n";
     my(@fc) =<$fh>;
     close($fh) or die "$me:  Couldn't close $_[0]:  $!\n";
     if ($fc[0] =~ /\r/) { @fc = map { s/\r\n?/\n/g; split /(?<=\n)/ } @fc; }
     if (wantarray()) { return @fc; }
     else { return join('', @fc) }
}
**************************************

How can I use the "safe" 3-argument open and still be able to read off a
pipe?

- Bryan





Well, this doesn't use the 3-argument open but it gets the job done.

#!/usr/bin/env perl

use strict;
use warnings;

my @files = ( $0, '-', $0 );

for my $file ( @files ){
  print reverse readfile( $file );
}

sub readfile {
  local @ARGV = @_;
  my ( @fc ) = <>;

  # as above

  return wantarray ? @fc : join( '', @fc );
}

__END__


--
Just my 0.00000002 million dollars worth,
  Shawn

Confusion is the first step of understanding.

Programming is as much about organization and communication
as it is about coding.

The secret to great software:  Fail early & often.

Eliminate software piracy:  use only FLOSS.

"Make something worthwhile."  -- Dear Hunter

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to