問題タブ [perlvar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - %INC と @INC の違いは何ですか?
Perlの%INCとの違いは何ですか?@INC
perl - Perlで特殊変数$@はどういう意味ですか?
次のコードを理解しようとしています。
perl - %INC のキーと値はプラットフォームに依存しますか?
含まれているモジュールの完全なファイル名を取得したいと思います。次のコードを検討してください。
すべてのプラットフォームで動作しますか?
perlvar
ハッシュには、、、または演算子によって含まれる各ファイル名のエントリ が含ま
%INCれます。キーは指定したファイル名 (モジュール名はパス名に変換されます) で、値は見つかったファイルの場所です。dorequireuse
これらのキーはプラットフォームに依存しますか? 私は何を使うべきFile::Specですか?少なくとも win32 の ActivePerl は/の代わりに使用し\ます。
更新:%INC値についてはどうですか? それらはプラットフォームに依存していますか?
perl - $ _は、名前付き入力またはループ引数とどのように異なりますか?
$ _をよく使うので、その使い方をもっとよく理解したいと思います。$ _は、私が理解して使用した限り、暗黙の値のグローバル変数です。
とにかく$_が設定されているように見えるので、読みやすさ以外に$ _よりも名前付きループ変数を使用する理由はありますか?
$ _がグローバル変数であることが重要なのはどのような場合ですか?
だから私が使うなら
あるいは
と同じ効果があります
しかし、それは同じように機能しますか?正確ではないと思いますが、実際の違いは何ですか?
更新:
この例では、$_のスコープも正しく設定されているようです。もうグローバルではないですか?5.12.3を使用しています。
1234one1234two1234three1234fourを正しく出力します。
グローバル$_の場合、私は1234 4 1234 4 1234 4 1234 4 ..を期待していましたか、それとも明らかな何かが欠けていますか?
$ _グローバルはいつですか?
更新:
さて、さまざまな答えとperlsynをもっと注意深く読んだ後、私は結論に達しました:
読みやすさに加えて、$ _の暗黙的なローカリゼーションを知って考慮に入れる必要があるため、$ _の使用を避けることをお勧めします。そうしないと、予期しない動作が発生する可能性があります。
その問題を明確にしてくれてありがとう。
perl - find/xargs/perl -ne の現在のファイル名?
私はシェルで作業していて、たくさんの CSV ファイルで NUL 文字を見つけようとしています (Python の CSV インポーターがうそをついていますが、それは別の機会にします)。
ファイル名が表示されないことを除いて。私のスクリプトをラップしている暗黙の <> 演算子は / ファイルハンドルを使用しているだけですが、上記のどちらも現在のファイルの名前を教えてくれません。perl -ne@ARGVARGV
上記の現在のファイル名 (および理想的には行番号) を確認するにはどうすればよいですか?
perl - Perlのデフォルト変数$_のスコープ
変数を受け取り、データベースからの情報を表示する次のメソッドがあります。
foreachループの印刷行を除いて、すべて正常に機能します。この$_変数には、メソッドに渡された値が引き続き含まれています。
$ _に新しい値のスコープを「強制」する方法はありますか、それとも常に元の値が含まれますか?
$ _のスコープがどのように機能するかを説明する優れたチュートリアルがあれば、それもすばらしいでしょう。
ありがとう
regex - 最後に成功した正規表現一致の開始位置と終了位置に使用される Perl 変数は何ですか?
最後に成功した正規表現一致の開始位置と終了位置に使用される Perl 変数は何ですか?
perl - Perlをだまして変数%INCを使用させ、それでもグローバル%INCをそのままにしておくことは可能ですか?
my %INC使用しているスクリプトに、インセンティブに関する値を格納するサブが含まれているのを見つけました%INC。これは決して問題とは思われなかったし、誰も気づかなかった。私にとっては、再定義警告の20画面が生成されました。これは%INC、Perlがdone、required、またはusedを持つすべてのファイル名を保持しているため、かなり大きく、現在は('stuff' => 123)です。
私は本当にサブでこれへのすべての参照の名前を変更する必要がありますか、それともPerlにこれを許させる別の方法がありますか...?
これが出力の一部です:
出力:
警告は、クラスの1つのオブジェクトを作成した場合にのみ表示されます(これにはたまたま含まれSOAP::WSDLているため、多くのものが含まれています)。なぜそれらが警告を再定義するのかわかりません。が空の場合%INC、どのようにしてものが再定義されているかを知ることができますか?
アップデート:
実際に字句を作成できるmy %INCようです。
生産(盗聴):
私の場合の問題は、my %INCではなく、%INC = &sub_that_has_my_percent_INC_and_returns_it()実際に必要なスクリプトの問題のようですrequire。今度は、もありますuse vars qw(%INC)。それを交換する...まあ、それが何を壊すのかわかりません。
perl - 16 ビットのステータスワード perlvar
これに出くわしたとき、私はperlvarを読んでいました-
最後のパイプ クローズ、バックティック (`` ) コマンド、wait() または waitpid() の呼び出しの成功、または system() オペレーターから返されたステータス。これは、従来の Unix の wait() システム コールによって返される 16 ビットのステータス ワードです (または、そのように見えるように構成されています)。したがって、サブプロセスの終了値は実際には ($?>> 8 ) であり、$? & 127 はどの信号を与えるか
16 ビット ステータス ワードとは何ですか? '$?>> 8' という操作は何を意味しますか? '512' のような 16 ビット ワードは、'$?>> 8' を実行した後、どのように '2' に変換されるのでしょうか?
perl - 「スコープ」にないPerlのパッケージ変数?
私はこの質問を見ていて、遊んでいるときにこれに出くわしました:
はい、use warnings;電源を切りました...
これを実行すると、次のようになります。
うーん...同じ「変数 "$foo" は ./test.pl 行 12 にインポートされていません。 」というエラーが表示されmy $foo = "bar";ます。ブロックを離れるとmy変数がないため、使用するとこれを理解できます。$fooただし、our変数はパッケージスコープであると想定されています。$fooその時点で価値がないかもしれないことは理解できましたが、これは?
また、「Variable "$foo" is not import at ./test.pl line 12.」はどういう意味ですか? パッケージとインポートについては理解していますが、ここにはパッケージが 1 つしかありませんmain。パッケージ$fooに入っている必要があります。mainインポートする必要はありません。
スコープ外になった後、パッケージに含まれていないように見えるパッケージ変数で何が起こっていますか?
補遺
したがって、 を使用
$::fooしたり、 で別のエイリアスを作成したりしour $foo;た場合、プログラムは期待どおりに動作します。cmj
これを試してみましょう...
これで、次のように出力されます。
回答したすべての人が指摘したように、同じ名前のパッケージ変数にエイリアスourを作成するだけで、レキシカルスコープです。つまり、エイリアスが範囲外になると、withの値にアクセスできなくなります。それは私が今まで気づかなかったことです。$main::foo$foo
ただし、 cjm が指摘したように、再宣言our $foo;するとエイリアスが復元され、既存の$main::fooは新しい にエイリアスされます$foo。再宣言するour $foo;と、 の値$fooが復元されます。
ourこれは、非常に紛らわしい変数の 1 つです。宣言が表示our $foo;され、突然その変数が存在するだけでなく、不思議な値が含まれています。プログラムを検索して、その値がどこから来たのかを確認する必要があります。