PHP

ある方にエラー処理演算子を使う例をいただいたので採用。

<?php
$argv = $_SERVER['argv'];
if (count($argv) != 2) {
   die("Usage: $argv[0] filename\n");
}
$buf = @file_get_contents($argv[1]) or die("Error: failed reading $argv[1]\n");
echo implode("\n", preg_split('/\s+/', $buf));
?>

補足: PHP5ではfprintfが付いたのでfwriteとsprintfで別々に処理しなくて済む。

Perl

if(scalar(@ARGV) != 1) {
    die "Usage: $0 filename\n";
}
open f, $ARGV[0] or die($!);
print join("\n", split(/\s+/, join('', <f>))) . "\n";

Alt A: クールにワンライナーで処理

> perl -e 'print join("\n", split(/\s+/, join("", <>))) . "\n"'

Alt A': 改行を未定義にすればもっと簡単ということらしい

> perl -e '$/ = undef; $_ = <>; s/\s+/\n/g; print'

Alt B: ある方よりの寄稿。さすがドウトデモ書ける言語だ。(でもちゃんとフルバッファしてないので残念)

use strict;
die "Usage: $0 FILENAME\n" unless ($#ARGV == 0);
eval{
   while(<>){
       s/\s+/\n/g;
       print;
   }
};
print $@ if ($@); 

Alt B': Alt A'にならって書くとこうなのだそうだ。いやはや。

use strict;
die "Usage: $0 FILENAME\n" unless ( $#ARGV == 0 );
eval {
    local $/ = undef;
    $_ = <>;
};
die $@ if ($@);
s/\s+/\n/g;
print;

Ruby

if ARGV.length != 1
  abort sprintf("Usage: %s filename\n", $0);
end
begin
  filebuf = open(ARGV[0]).read
rescue
  abort $!
end
filebuf.split(/\s+/).each do |s|
  puts s
end

Python

Pythonの'StringObject'.split()はwhite spaceならなんでも区切りにするあたりがエラい。

import sys
if(len(sys.argv) != 2):
    print >>sys.stderr, "Usage: %s filename" % sys.argv[0]
    sys.exit(1)
try:
    filebuf = open(sys.argv[1]).read()
except Exception, e:
    print >>sys.stderr, e
    sys.exit(1)
print '\n'.join([s for s in filebuf.split()])

LL/同じ処理での比較例/LL(PHP,Perl,Ruby,Python) (last edited 2006-06-13 01:32:19 by KeisukeUrago)