目录名和文件名可以是cgi perl脚本中的变量吗
我知道文件名在perl脚本中可以是可变的。这同样适用于cgi perl脚本。因为当我在open语句中使用变量时,我得到的错误是没有这样的文件或目录。但是当我直接提到文件打开读取的路径时,这些变量是从表单传递的。值传递正确,但它们不是空的(通过打印变量进行检查) 示例:目录名和文件名可以是cgi perl脚本中的变量吗,perl,file,cgi,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"; 错误:
$dir=abc;
$file=file1;
open (FILE, '/var/www/cgi-bin/$dir/$file')
or print "file cannot be opened $!\n";
错误:
$dir=abc;
$file=file1;
open (FILE, '/var/www/cgi-bin/$dir/$file')
or print "file cannot be opened $!\n";
文件无法打开没有这样的文件或目录
使用双引号插入变量:
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
,它不存在。使用双引号插值变量:
open (FILE, "/var/www/cgi-bin/$dir/$file")
# here __^ and here __^
or print "file cannot be opened $!\n";
而且,总是
use strict;
use warnings;
通过使用单引号,变量是t插值的,因此您试图按字面意思打开/var/www/cgi-bin/$dir/$file
,但它并不存在。您得到(并接受)了一个好答案。我只是想补充一点,如果在字符串中包含$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]无法打开:没有这样的文件或目录”,这显然表明变量没有展开
更新:我在胡说八道。新版本更好。你得到(并接受)了一个好答案。我只是想补充一点,如果在字符串中包含$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]无法打开:没有这样的文件或目录”,这显然表明变量没有展开
更新:我在胡说八道。新版本更好。@Raju:因为单引号内的变量不是插值变量。请参阅@Raju:因为单引号内的变量不是插值。看,你确定你会得到你提到的错误吗?在下面的部分中,[$file]将展开为它的双引号。是吗?你确定你会得到你提到的那个错误吗?在下面的部分中,[$file]将展开为它的双引号。不是吗?