我知道文件名在perl脚本中是可变的。这同样适用于cgi-perl脚本。因为当我在open语句中使用变量时我得到错误没有这样的文件或目录。但是当我直接提到路径时打开文件进行读取。这些变量从表单传递。值正确传递它们不为空(通过打印变量来检查)。
示例:
$dir=abc;
$file=file1;
open (FILE, '/var/www/cgi-bin/$dir/$file')
or print "file cannot be opened $!\n";
错误:
file cannot be opened no such file or directory
。
答案 0 :(得分:2)
使用双引号插入变量:
open (FILE, "/var/www/cgi-bin/$dir/$file")
# here __^ and here __^
or print "file cannot be opened $!\n";
另外,总是
use strict;
use warnings;
通过使用单引号,varibles不会被插值,所以你试图按字面意思打开/var/www/cgi-bin/$dir/$file
并且它不存在。
答案 1 :(得分:1)
你已经(并接受)了一个很好的答案。我只想补充一点,如果在字符串中包含$file
的值,则可以使错误消息更有用。
my $file_path = '/var/www/cgi-bin/$dir/$file';
open (FILE, $file_path)
or print "file [$file_path] cannot be opened: $!\n";
然后错误就是“文件[/ var / www / cgi-bin / $ dir / $ file]无法打开:没有这样的文件或目录”这会使变量显然不存在扩大。
更新:我在胡说八道。新版本更好。