目次googleで検索すれば数多のサイトが扱っているけど、 検索する度に自前で用意しておくことにしようかと。w
IO::Fileglobが使いたくないといつも思っているので、wrapしてくれる標準moduleはありがたい。 使い方はこんな感じ(って、まんま POD?)。my $fh = new IO::File($file, "r"); printf STDERR ("Can't open %s : $!\n", $file) unless ( defined($fh) ); undef $fh;# で close
cmdのwrapperよく対話形式のコマンドwrapperを作りたい時がある。大抵 open(=popen(3C))でいいが、1と2を分けて使いたいときはごっちゃにするopenでは困る。こんなとき便利なのが、IPC::Open3。まぁ、あとは順当にサンプルコードで。#!/usr/bin/perl use IPC::Open3; use IO::Select; $cmd = "/usr/bin/java"; $pid = open3(\*CHLD_STDIN, \*CHLD_STDOUT, \*CHLD_STDERR, $ARGV[0], @ARGV[1 .. $#ARGV]); $stdin = *CHLD_STDIN; $stdout = *CHLD_STDOUT; $stderr = *CHLD_STDERR; $out_fno = fileno($stdout); $err_fno = fileno($stderr); $sel = IO::Select->new(); $sel->add($stdout); $sel->add($stderr); SW:{ $timeout = 10; do { @ready = $sel->can_read($timeout); foreach (@ready) {前置きは上記のような感じであとは適当に作ればよいです。
File::Find packagefindを使いたいけど、細かく制御したい・・・と言うときに使える。むしろ、コマンド findを fork/execする型で 利用する気はわかなくなるぐらいいい感じです。感じとしては -exec optionの拡張と言うところでしょうか。詳細は man File::Find を見るとして簡単に findの filer use File::Find; find (\&filter, "."); sub filer { my $path = "$File::Find::name"; print "$path\n" if ( $_ =~ /^\._.*/ ); # このファイルのあるディレクトリ名は $File::Find::dir }このサンプルはfindして、macの場合に作られる ._xxx(DS_Storeとか)をリストします。 findの第一引数がファイルを見付ける毎に$_にファイル名を入れて呼ばれれます。 findの第二引数は find の rootです。
packageの変数領域を使った作りなので、MT-unsafeぽいですね。
端末制御文字の出力perlに限った話ではないが、termに出力する文字の飾り(色、反転等)をしたいときがある。 詳しくはそこらにあるman pageを参照ということで、 ここでは文字を文字色を黒、背景色を白で点滅表示する場合を書いておく。 入力としては Esc [ Ps;...;Ps m という形にすればよく、
なので、Esc [ 30;47;5mとなり perlでは "\x1b[39;47;5m"を出力すればよい。 入力行の取得よく使うスクリプトに、いくつかあるLabマシン行きのtelnet/ssh/ftp/consoleのwrapperスクリプトがあるのですが、CLIでinteractiveにしないと使いもんになりません。 大体、こんな感じのコードになってます。while ( 1 ) { $_ = <STDIN>;s/[\r\n]//; SW:{ /1/ && do { exec("telnet", "[行きたいホスト]", "[port]"); }; /.*/ && do { &usage() }; };# end of SW } |