On Thu Jan 21, 2010 at 11:08:39 +0100, Guido G??nther wrote:

> Failed to run filter: No such file or directory at /usr/bin/chronicle line 
> 2000.
>      #  Run the command, reading stdout.
>      #
> -    open( FILTER, "$cmd|;utf8" ) or
> +    open( FILTER, "$cmd|" ) or

  This will work, but means that any non-Latin characters will be lost.

  Can you please try running the sample program attached, and reporting
 the output?  That should be sufficient to tell me which alternative
 I should adopt.

Steve
--
#!/usr/bin/perl -w

use strict;
use warnings;

#
#  1.  Open normally.
#
print "1.  Open a pipe, normally\n";
open( CMD, "/bin/ls /etc/|" )
  or die "1. failed: $!";
while( my $line = <CMD> )
{
    print "\t$line" if ( $line =~ /(motd|group)$/ );
}
close( CMD );

#
#  2.  Open normally, binmode it.
#
print "2.  Open a pipe, set the mode\n";
open( CMD, "/bin/ls /etc/|" )
  or die "2. failed: $!";
binmode(CMD, ":utf8");
while( my $line = <CMD> )
{
    print "\t$line" if ( $line =~ /(motd|group)$/ );
}
close( CMD );


#
#  3.  Use a handle, as God intended.
#
print "3.  Open a handle.\n";
open my $handle, "-|", "/bin/ls /etc"
  or die "Failed : $!\n";
while( my $line = <$handle> )
{
    print "\t$line" if ( $line =~ /(motd|group)$/ );
}
close( $handle );


#
#  4.  Open a handle, use binmode
#
print "4.  Open a handle.  binmode\n";
open $handle, "-|", "/bin/ls /etc"
  or die "Failed: $!\n";
binmode( $handle, ":utf8" );
while( my $line = <$handle> )
{
    print "\t$line" if ( $line =~ /(motd|group)$/ );
}
close( $handle );


#
#  5.  Last ditch
#
print "5.  Last ditch.\n";
open $handle, "-|:utf8", "/bin/ls /etc"
  or die "Failed: $!\n";
while( my $line = <$handle> )
{
    print "\t$line" if ( $line =~ /(motd|group)$/ );
}
close( $handle );

Reply via email to