目录名称和文件名可以是cgi perl脚本中的变量

时间:2013-09-23 07:47:59

标签: perl file cgi

我知道文件名在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

2 个答案:

答案 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]无法打开:没有这样的文件或目录”这会使变量显然不存在扩大。

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