我一直在使用我的这个脚本FOREVER,我一直用"〜/"来扩展我的主目录.我今天上班了,它停止了工作:
#if ( $output eq "" ) { $output = "~/tmp/find_$strings[0].rslt" } # BROKEN
if ( $output eq "" ) { $output = "$ENV{HOME}/tmp/find_$strings[0].rslt" } #WORKS
...
open OUT_FILE, ">$output" or die "cant open $output : $!";
Run Code Online (Sandbox Code Playgroud)
关于为什么会突然停止工作的任何想法?
错误看起来像:
cant open stephen/tmp/find_coverp.rslt : No such file or directory at /user/stephen/bin/find.pl line 137.
Run Code Online (Sandbox Code Playgroud)
如前面的答案所述," ~"(代字号)由shell扩展,而不是perl.最有可能的是,由于~当前目录中存在目录" ",它最终被删除,导致出现错误:
为了显示:
Tilde不在Perl中工作,使用$ ENV {HOME}工作:
$ echo MM > MM
$ perl5.8 -e '{print `cat ~/MM`}'
cat: cannot open ~/MM
$ perl5.8 -e '{print `cat $ENV{HOME}/MM`}'
MM
使波浪号命名目录起作用:
$ mkdir \~
$ echo MM > \~/MM
$ ls -l \~
-rw-rw-r-- 1 DVK users 3 Jun 10 15:15 MM
$ perl5.8 -e '{print `cat ~/MM`}'
MM
正如您所观察到的那样,删除它会恢复错误:
$ /bin/rm -r \~
$ ls -l \~
~: No such file or directory
$ perl5.8 -e '{print `cat ~/MM`}'
cat: cannot open ~/MM
这提供了一个似是而非的解释,虽然我不是100%,但不可能有其他人.