0

我知道文件名在 perl 脚本中可以是可变的。同样适用于 cgi-perl 脚本。因为当我在 open 语句中使用变量时,我收到错误 No such file or directory。但是当我直接提到文件的路径时打开以供阅读。这些变量是从表单传递的。正确传递的值不为空(通过打印变量进行检查)。

例子:

$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.

4

2 回答 2

2

使用双引号插入变量:

open (FILE, "/var/www/cgi-bin/$dir/$file")
#    here __^                and here __^
    or print "file cannot be opened $!\n";

此外,总是

use strict;
use warnings;

通过使用单引号,不会对变量进行插值,因此您尝试按字面意思打开/var/www/cgi-bin/$dir/$file,但它不存在。

于 2013-09-23T08:08:24.223 回答
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] 无法打开:没有这样的文件或目录”,这表明变量没有被扩展。

更新:我在胡说八道。新版本更好。

于 2013-09-23T09:25:40.023 回答