in reply to Filehandles and Input and Output Filters

devarishi:

Here's a trivial example. Suppose you have a program that generates some output, but you'd like the output sorted. You can do it like so:

use strict; use warnings; open my $F1, '| sort >t' or die; while (<DATA>) { print $F1 $_; } __DATA__ the quick red fox jumped over the lazy brown dog

This trivial program just writes a few words, and then uses the sort program to sort the output using the sort program as a filter. When you run it, you get this:

$ perl foo.pl $ cat t brown dog fox jumped lazy over quick red the the

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Replies are listed 'Best First'.
Re^2: Filehandles and Input and Output Filters
by devarishi (Initiate) on Nov 03, 2011 at 13:35 UTC
    roboticus: Thanks a lot! Based upon my understanding of your program above, I wrote this small one:
    #!/usr/bin/perl -w open ($FH,'| sort -n') or die($!); while(<ARGV>){ print $FH $_; } close $FH;
    Thanks again for "__DATA__" as well. There is one thing I would like mention: I used to write FH instead of $FH in open() as the file-handler. But both of them work. I did not know it. Please have a look at this:
    [demo@localhost Perl]$ cat bar.pl #!/usr/bin/perl -w open (FH,'| sort') or die($!); $count=0; while(<ARGV>){ print FH $_; print $count++ . "\n"; } close FH; [demo@localhost Perl]$ bar.pl words 0 1 2 3 4 A ABC a to z Buy Why
    The line numbers are being printed out first and then the sorted list of the words. That means (this is what I understand now) that the data are being fed to the "sort" command which returns its result when all the input to it is fed.

      devarishi:

      Yes, it sounds like you've got a handle on it, now. Note that you can also have a filter on the input, too. So if you wanted to process the records in sorted order, you could open the incoming data stream with a filter to do so.

      Regarding the $FH file handle versus the FH version: Modern perl practice discourages the old style (FH) style. The older style continues to work, obviously, but using a file handle in a scalar allows you a bit more flexibility in scoping and a bit more simplicity when passing the file handle to subroutines and such.

      ...roboticus

      When your only tool is a hammer, all problems look like your thumb.