2012-04-04

Perl - WindowsでPerl

ワンライナー

ネットで見つけたワンライナーをコマンドプロンプトで使おうとすると
perl -e 'print "Hello, World!"'
Can't find string terminator "'" anywhere before EOF at -e line 1.
こんな感じでエラーが出て使えません。

引数はダブルクォートで囲わないとダメなので少し変更しないといけません。
# 内側のダブルクォートをエスケープする
perl -e "print \"Hello, World!\""

# qq 演算子を使う
perl -e "print qq{Hello, World!}"

# 内側のダブルクォートをシングルクォートに置き換える
perl -e "print 'Hello, World!'"

# q 演算子を使う
perl -e "print q{Hello, World!}"


perlへのショートカット

こんな感じでショートカットを作っておくと
ファイルをドラッグアンドドロップで実行できます。



バッチファイルでもできるのでお好きな方をどうぞ。
@echo off
cd /d "%~dp0"
cmd /k perl %1


UTF8を出力

現在では UTF8 でコードを書くのが主流ですが、
コマンドプロンプトの文字コードは CP932 なので
UTF8 で出力すると当然、文字化けします。

これは binmode で文字コードを CP932 にすれば大丈夫。
use strict;
use warnings;
use utf8;
binmode STDOUT => ':encoding(cp932)';

print "寿限無寿限無";
出力を UTF8 のまま得たい場合はテキストファイルに出力します。
use strict;
use warnings;
use utf8;
binmode STDOUT => ':utf8';

print "寿限無寿限無";
perl "C:\utf8.pl" > "C:\utf8.txt"
コマンドプロンプトの文字コードを UTF8 にする方法は
うまくいかない場合があるので、テキストファイルに出力した方が確実です。


秀丸でperl

秀丸マクロを覚えるのが面倒というあなたへ。
ちょこっと整形、置換、抽出したいときは 「その他 > プログラム実行」から perl が使えます。



ただ、これだと UTF8 でコードを書いた場合、shift-jis に変換されるのでうまくいきません。
この場合、下のように設定してください。
「Unicodeで標準入出力」は UTF-16 なのでチェックしません。



これは perl にファイル名を渡して cp932 で出力を受け取ります。
なのでファイルとして保存してから実行してください。
# サンプル
use strict;
use warnings;
use utf8;

binmode STDOUT => ':encoding(cp932)';
binmode STDERR => ':encoding(cp932)';

for my $line (<DATA>){
    chomp $line;
    print "僕と契約してよ、$line。\n";
}

__END__
うろぶち
きょうこ
まみ
まどか
さやか
ほむら
__END__ 以下は <DATA> で読み出せるので処理したいデータを貼り付けて
for なり while で回してゴニョゴニョします。

ちょろっとテキストを処理したいときなんか便利じゃないでしょうか。

0 コメント:

コメントを投稿