
私の状況は次のとおりです。 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.\-_]
。