スクリプト名を抽出する良い方法ですか?

スクリプト名を抽出する良い方法ですか?

私の状況は次のとおりです。 Perlスクリプトは自分の名前を話したいです。頑張った

print "$0\n";

スクリプトと同じディレクトリで作業している場合、これは良い解決策です。この解決策を見つけました

use strict;
use warnings;
$0 =~ /([\w\.\-\_]+)$/;
my $this = $1;
print "my name is $this\n";

これは良い解決策ですか?

ベストアンサー1

ファイル名は決して存在しないので、/次のことを行うだけで十分です。

$0=~/([^\/]+)$/;
my $this = $1;
print "my name is $this\n";

\0ファイル名の他のもの(除外)は公正なゲームです。したがって、あなたの方法は、次のようなクレイジーファイル名を見逃すでしょう。

th&is%sc(ip)tHas
      a^really#weird"+Name=!

はい、その名前でファイルを生成できます。

$ touch 'th&is%sc(ip)tHas'$'\n'$'\t''a^really#weird"+Name=!'
$ ls -l *Nam*
-rw-r--r-- 1 terdon terdon 0 Jul  5 16:00 'th&is%sc(ip)tHas'$'\n\t''a^really#weird"+Name=!'

ただし、Perlはこの問題を処理できます。私はそのひどい名前で上記の行を保存し、以下を実行しました。

$ perl *Nam*
my name is th&is%sc(ip)tHas
    a^really#weird"+Name=!

元のバージョンは、次の理由で失敗します。

$ perl *Nam*
Use of uninitialized value $this in concatenation (.) or string at th&is%sc(ip)tHas
    a^really#weird"+Name=! line 7.
my name is 

[\w\.\-\_]1は&%()^#"+=!名前の記号()やスペースと一致しないためです。


1ところで、ほとんどの場合、脱出する必要はありません。ただ使用してください[\w.\-_]

おすすめ記事