Xah Lee wrote: [...] > In perl, similar code can be achieved. > the following code illustrates. > > if (scalar @ARGV != 4)
Why scalar()? The comparison already creates a scalar context, no need to enforce it twice. > {die "Wrong arg! Unix BNF: $0 <sstr> <rstr> > <file id1> <file id2>\n"} > $stext=$ARGV[0]; > $rtext=$ARGV[1]; > $infile = $ARGV[2]; > $outfile = $ARGV[3]; Ouch, how ugly. What's wrong with a simple my ($one, $two, $three, $four) = @ARGV; or the standard way using shift for ($one, $two, $three, $four) { $_ = shift; } > open(F1, "<$infile") or die "Perl fucked up. Reason: $!"; > open(F2, ">$outfile") or die "Perl fucked up. Reason: $!"; Really? Usually it's either the OS or the user (disk full, no write permissions, wrong file name, ...) > while ($line = <F1>) { Why $line? It doesn't serve any useful purpose here. > chomp($line); Why chomp()? It doesn't serve any useful purpose here. > $line =~ s/$stext/$rtext/g; If you would not have used $line above then you would not need the binding here. > print F2 "$line\n"; If you would not have chomped the line above then you would not need to add the newline back here. A simpler print F2 $_; would have sufficed > } > close(F1) or die "Perl fucked up. Reason: $!"; > close(F2) or die "Perl fucked up. Reason: $!"; I find this highly unlikely. If at all then the OS failed to complete the close. jue -- http://mail.python.org/mailman/listinfo/python-list