開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Strawberry Perl (WindowsのPerlの言語処理系)
- Visual Studio Code (Text Editor)
- Perl 5.28 (プログラミング言語)
Perlの使い捨てスクリプトの入出力は、ダイヤモンド演算子がやっぱり便利。
— Perlゼミ (@perlzemi) 2019年2月13日
while (my $line = <>) {
# ごにょライン
print $line;
}
使うときはhttps://t.co/VFsGcgPhsV input.txt > output.txt
入力はファイルで受け取って、出力は標準出力をリダイレクト。
使い捨て用だから同じことをするコードをもっと短く書いてみた。
いずれも標準出力はファイルへリダイレクトせずそのまま表示。一つ目のコードの「chcp 65001」は、文字番号を変更して日本語環境のコマンドプロンプトでUTF-8をちゃんと表示するため。(日本語の出力がなくASCIIコードの範囲なら変更しなくても問題なくちゃんと出力される。)
コード
while (<>) { print; }
入出力結果(cmd(コマンドプロンプト)、Terminal)
C:\Users\...>chcp 65001 Active code page: 65001 C:\Users\...>type input.txt foo 日本語 bar C:\Users\...>perl sample.py input.txt foo 日本語 bar C:\Users\...>
コメントにあるように、読み込んだ行をごにょごにょ何かしてから出力したい場合は、$_特殊変数を利用すればいい。
コード
while (<>) { # 行末の改行を削除 chomp $_; print "Hello, $_!\n"; }
入出力結果(cmd(コマンドプロンプト)、Terminal)
C:\Users\...>perl sample.pl input.txt Hello, foo! Hello, 日本語! Hello, bar! C:\Users\...>
さらにコマンドライン引数を指定してワンライナーでコードを書いたファイルも不要に。
入出力結果(cmd(コマンドプロンプト)、Terminal)
C:\Users\...>perl -e 'while(<>){print;}' input.txt foo 日本語 bar C:\Users\...>perl -p -w -e '' input.txt foo 日本語 bar C:\Users\...>
ということで、普段は🐍Pythonを使うことが多いけど、🐪Perlのショートカットの豊富さや、ワンライナーはいいなぁと思ったり。
0 コメント:
コメントを投稿