より正確には「our変数を $a のようにパッケージを指定せずに使うときに補うパッケージ名は my 変数と同じスコープ・ルールに従い、$main::a のようにパッケージ名を指定したときはスコープに関係ないグローバル変数として利用可能」とでも言いましょうか。 ⇒ http://blog.livedoor.jp/dankogai/archives/50982802.html それではour $var = 'val';とは何でしょうか。以下と等価だと言えばいいのです。 do{ no strict 'refs'; ${ __PACKAGE__ . '::var' } = 'val'; }; パッケージ名を指定するときは混乱しようがないのですが、指定してない our 変数がどのグローバル変数に対応しているのか注意を要するときがあります。それは一つのスコープに複数のパッケージを並べて記述するときです
2008年01月10日10:15 カテゴリLightweight Languages perl - myとourとscopeと うーん、微妙に違います。 local と my - IT戦記 our 名前をソース上のスコープに限定. local 値をスタック上のスコープに限定. my 名前と値の両方をソース上のスコープに限定 なら、理解しやすいと思います>< 以下のコードを見てみましょう。何と表示されるでしょうか。 { package Foo; our $bar = 'baz'; } our $bar = 'drink'; warn $bar; warn $Foo::bar; 「ソースに限定する」あるいは「ファイルに限定する」のだとしたら、この挙動はありえないはずです。 ここで、Perlのスコープに関するルールを覚えておきましょう。すっごく簡単です。 {}は、問答無用でスコープを作る = b
指定したファイル記述子のうち、どれが入出力操作が可能になっているのか、またはどれが例外状態にあるかを調べるものです。selectシステムコールを実行します。 ファイル記述子については用語集「ファイル記述子」を参照してください。 ビットマスクは、filenoとvecを使って、次のようにして作成することができます。 $rin = $win = $ein = ''; vec($rin,fileno(STDIN),1) = 1; vec($win,fileno(STDOUT),1) = 1; $ein = $rin | $win; 複数のファイルハンドルにselectを行ないたいのであれば、次のようなサブルーチンを書くとよいでしょう。 sub fhbits { local(@fhlist) = split(' ',$_[0]); local($bits); for (@fhlist) { vec(
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く