3

do EXPR構成情報としてリストを返すだけの 2 つ目の .pl ファイルを使用して、Perl の関数を貧弱な構成パーサーとして使用しようとしています。do(特に、コードに" " を記述できるため、これはおそらく の理想的な使用方法だと思いdo or dieます。) 次に例を示します。

main.pl

# Go read the config file
my %config = do './config.pl';

# do something with it
$web_object->login($config{username}, $config{password});

config.pl

# Configuration file for main script
(
  username => "username",
  password => "none_of_your_business",
  favorite_color => "0x0000FF",
);

Perldoc を読むと、相対パスに関する多くの役立つアドバイスが得られます - @INC の検索と %INC の変更、「.」を検索しない 5.26 に関する特別な警告doなどなど。ただし、次のビットもあります。

# 指定されたファイル(./ および ../ 特殊ケース) を正確にロードします...


do を相対パス(./ と ../ を除く)で使用すると、次のようになります。

そして、「./」または「../」の特別なケースのパス処理を実際に説明することは決してありません-重要な省略です!

だから私の質問は、「あなたが実際に何が起こるか」のすべてのバリエーションdo './file.pl';です。例えば...

  • CWD は @INC から削除されていますが、この構文は 5.26 でも機能しますか?
  • いずれにせよ「./」は誰の視点から見れば: Perl バイナリ、実行された Perl スクリプト、ユーザーのシェルからの CWD、または何か?
  • 注意すべきセキュリティリスクはありますか?
  • これは、@INC を変更してベース ファイル名を使用するよりも良いですか、悪いですか?

どんな洞察も高く評価されます。

4

1 に答える 1