小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

Perlノート

続・Perlでtaskkill for Windows

昨日のサンプルをモダンPerl風に書き換えてみました。 しかし、あんまりモダンでもないかも・・・。 use strict; use warnings; # ユーザ名 papa タスク名 notepad.exe taskkill('papa', 'notepad.exe'); sub taskkill { my ($username, $taskname) = @_; $/ = …

Perlでtaskkill for Windows

Excelのプロセスなど、たまに残ってしまうことがあります。 そんな時は、以下のサンプルでそのプロセスを強制終了させることができます。 ◆サンプルソース use strict; use warnings; # ユーザ名 papa タスク名 EXCEL.EXE taskkill('papa', 'EXCEL.EXE'); su…

イベントログへメッセージ出力

CGIとか裏で動くプログラムは、画面やログファイルにエラーやワーニングの情報を出力できないケースがあったりします。 そんな時は、イベントログへ出力すればラクチンです。まぁ For Windowsですが・・・。 以下はそのサンプルです。 ◆サンプルソース use stri…

JPerl Advent Calendar 2008

なんか、凄く濃いPerlコンテンツを見つけたので、ご紹介します。 ライターは、日本のPerl界隈では結構有名な人達らしい・・・(弾さんと竹迫さんぐらいしか、私は知らないけど)。 定数の展開 - 1日目 myのリファレンス - 2日目 $@はグローバル変数 - 3日目 無…

Perlでの正規表現を再勉強

Perlでの正規表現が、解かりやすく、良くまとまっているWebページを見つけましたのでご紹介します。 http://ja.wikibooks.org/wiki/Perl/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE 私も最後の方は知らないこと(拡張正規表現や拡張構文)があって勉強になりまし…

Get!『まるごとPerl! Vol.1』

かなり遅ればせながら・・・ですが、またまた行った書店で一冊売っていたので、即買いました。 この本、普通は売っていませんよね。 この本は、2006年の9月頃に発売されていて、なんだかんだ4年も前の本になっているのですね。 しかし、初心者の人には全…

Perlでのファイルハンドルとは何か?

実は、つい最近までファイルハンドルをファイルディスクリプタと勘違いしていました。 Perlでのファイルディスクリプタとは、fileno関数の引数にファイルハンドルを渡し、実行して得られるものでした。Perlでのファイルハンドルとは、ファイルディスクリプタ…

パッケージサブルーチンとbless

えーと実は、サブルーチンは必ずどこかのパッケージに属しています。 そう、パッケージ宣言しないと自動的にmainパッケージになるのです。 そして、サブルーチンのコールには、以下の4通りがあるのです(他にもあるかも)。 パッケージデリミタを使ってサブ…

無名サブルーチンとクロージャ

昨日言っていた『インナーサブルーチンを使って親のレキシカル変数をリターン値にすると、初回の値を保持するようなのです』の性質を利用するとstatic変数だけでなく、クロージャも出来ますね! ◆サンプル(closure.pl) use strict; use warnings; sub clos…

内部サブルーチンとstatic変数

なんか、妙な現象に遭遇しました。まぁ、知っている人には常識なのかもしれませんが・・・ Perlでは、言語仕様的にはC言語のようなstatic変数は、ありません。 (追記:state変数というstatic変数のようなものが、Perl5.10 から導入されました。) しかし、内部…

pwdには気をつけろ!

最近はLinux上でPerlスクリプトを書く機会が多く、今までのWindows上と違って、気が付くとPerlスクリプトの中身がUnixコマンドのオンパレードになっていたりします。 カレントディレクトリを求める時、Windows上では、ちゃんと『use Cwd;』モジュールを使っ…

grep関数で文字列にマッチさせるには

grep関数は、第1引数の検索文字列で、第2引数の配列の中を検索し、マッチした要素内容を配列で返します。 第1引数の検索文字列は、実は正規表現なのです。 なので、以下のように意外な要素を引っ掛けてしまうのです。 サンプル(grep.pl) #!/usr/bin/per…

ActivePerlでCPANからモジュールをゲットする

標準モジュール以外のCPANモジュールが必要なケースはあまりないのですが、それでもたまにありますね。 ActivePerlでは、CPANモジュールを簡単にインストールすることができるppmというコマンドがあります。 インストールとアンインストールは、コマンドプロ…

Perlでのゼロパディング

たとえば、4桁固定で4桁に満たない場合はゼロを付加する(ゼロパディング)と言う場合が結構あります。 以下はそんな時に使えるサンプルです。 #!/usr/bin/perl use strict; use warnings; my $aaa; # sprintfを使う $aaa = 1; $aaa = sprintf("%04d",$aaa…

続・論理和演算子『||』と『or』の違い

以下は、前回書いた『論理和演算子『||』と『or』の違い』です。 演算子とor演算子は、共に論理和演算子なのですが、演算子の優先順位が違います。 ちなみに、論理和演算子とは、左側を評価して真であれば、右側を評価せずに結果を返します。 以下のように||…

int関数の意外な使い道

Perlの組み込み関数に、数値を整数化するint関数があります。 通常は、小数点以下切り捨ての場合に使用しますが、実はコレ、文字列にも有効なのです。 たとえば、文字列『"0010ABC222"』に対してint関数を行うと『10』が返ります。 また、文字列『"01"』や『…

フォルダ配下の一覧を取得する関数

Perlでフォルダ内の一覧は、組み込み関数のglobとかreaddirなどで取得することができますが、フォルダ配下を再帰的に一切合切取得することは出来ません。 なので、 標準モジュールFile::Findを利用して、フォルダ配下を再帰的に一切合切取得する『get_DirFil…

バグはいつも素敵に意外に隠れている

えーと、Windows上のArchive::Tarモジュールで任意のフォルダ配下を固めてxx.tar.gzとし、それをNet::FTPモジュールでlinuxサーバーへ送り、サーバーのコマンド(tar -xzvf)で復元するとエラーになるのです。 原因は、複数のファイルやフォルダを一緒に固め…

「魔法がかけられたリファレンス」を作るblessとは

えーと最近、XS言語やC言語からのPerlコールなどに手を出しています。 ラクダ本やWEBでXS言語リファレンスを読んでいるのですが、イマイチしっくりこなくて、本屋に行って『モダンPerl入門』と云う本を買いました。 ちなみに、本の置いてあるスペースが6:4:2…

PerlでWindowsAPIをコールする(DynaLoader編)

昨日、『Perl で Win32::API プログラミング入門』リンクメモでのお約束(暇な時にソース解析)の前半部だけをソース解析してみました。今日は後半部のソース解析をしてみます。 しかし、実力不足で10%ぐらいしか分からなかったです。 #!/usr/bin/perl us…

PerlでWindowsAPIをコールする

前回、『Perl で Win32::API プログラミング入門』リンクメモでのお約束(暇な時にソース解析)、とりあえず前半部だけソース解析をしてみました。 #!/usr/bin/perl use Win32::API; my $MessageBox = Win32::API->new("user32", "MessageBoxA", "NPPN", "N"…

PerlでFTP(ファイル転送)するには

PerlでFTPするには、いろいろあると思いますが、標準モジュールNet::FTPを使用するのが簡単です。 ◆標準モジュールNet::FTP使用のサンプル use strict; use warnings; use Net::FTP; open(STDERR, '>>err.log'); my $ftp=Net::FTP->new('host.hatena.ne.jp',…

フォルダ内の子フォルダ削除(rmtree)の留意点

Perlでフォルダ内のファイルもフォルダもファイルが格納されているフォルダも問答無用で削除するにはFile::Pathモジュールのrmtreeを使います。 組み込み関数のrmdirもありますが、こちらは、削除しようとしているフォルダ内にファイルやフォルダがある場合…

Windows上のPerlで改行コードをLF(0x0a)にするには

通常、Windows上で改行処理をする時の改行(\n)のコードは、CR LF(0x0d0a)です。 しかし、Linux用にファイル出力をする時は、LF(0x0a)にしたいのです。 エスケープ文字にも\rや\nは有りますが、LFになるもは無いのです。 この場合は、オープン後にbinmo…

意外と役に立ちますよ!

私は今、ツールとしてExcelとPerlを使った仕事をしています。 ここ数日は残業で、分からないことは、ネットで調べるのですが、ほとんど「VB-TIPS」と「Perlノート]で用が足りるのです。 いやー、ExcelとPerlを使っているには、「VB-TIPS」と「Perlノート]の…

『Perl で Win32::API プログラミング入門』リンクメモ

Win32::APIモジュールやDynaLoaderでの「Hello, World!」プログラム http://d.hatena.ne.jp/TAKESAKO/20090324/1237879559 今の私のレベルでは、チンプンカンプンですが、とりあえずメモしときます。 ◆Win32::APIモジュールで #!/usr/bin/perl use Win32::AP…

標準関数と組み込み関数

すみません。Perlでの標準関数と組み込み関数を勘違いしていました。 組み込み関数だけを標準関数だと思い込み、標準モジュール関数は標準関数でないと思っていました。 標準関数と云うのは、以下の通り、標準で使える関数なので、組み込み関数も標準モジュ…

Perlでファイルコピー

えーと、Perlではファイルコピーの組み込み関数がありません。 では、どうやってコピーするかというと標準モジュールのFile::Copyを使います。 use File::Copy; copy("from_file", "to_file"); http://okwave.jp/qa885014.html

Excelオブジェクト作成を連続要求すると発生するエラー

『RPC サーバーを利用できません』や『リモート プロシージャコールに失敗しました』のエラーが出たら・・・ sub excel_io { $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); : : $excel->Quit…

PerlでSwitch文(Case文)

Perlでは、言語仕様的にはSwitch文はありませんが、Switchモジュールを使用することで実現が可能です。 use Switch; switch ($val) { case 1 { print "number 1" } case "a" { print "string a" } case [1..10,42] { print "number in list" } case (@array)…