【问题标题】:Why can't Perl's open find my file?为什么 Perl 的 open 找不到我的文件?
【发布时间】:2010-05-17 10:01:08
【问题描述】:

我是 Perl 编码的新手。 我在执行一个小脚本时遇到问题: open 找不到我作为参数提供的文件。

文件可用:

 ls -l DLmissing_months.sql
-rwxr-xr-x   1 tlmwrk61 aimsys      2842 May 16 09:44 DLmissing_months.sql

我的 Perl 脚本:

#!/usr/local/bin/perl

use strict;
use warnings;

my $this_line = "";
my $do_next = 0;
my $file_name = $ARGV[0];
open( my $fh, '<', '$file_name')
    or die "Error opening file - $!\n";
close($fh);

执行 Perl 脚本:

> new.pl DLmissing_months.sql
Error opening file - No such file or directory

我的 Perl 脚本有什么问题?

【问题讨论】:

  • 我也强烈建议您使用autodie。它将使您不必键入烦人的or die 语句。其中,您忘记检查close($fh)(大多数人无论如何都不会想到这样做)。

标签: perl file-io


【解决方案1】:

单引号不会插入。您不是打开DLmissing_months.sql,而是尝试打开一个名为$file_name 的文件。使用双引号进行插值。在这种情况下,您可以单独使用该变量:

open( my $fh, '<', $file_name)

【讨论】:

    【解决方案2】:

    您已将$file_name 放在单引号内。单引号是非插值的,因此您正在尝试读取名为“$file_name”的文件,而不是名为“存储在 $file_name 标量中的任何内容”的文件。

    去掉引号。

    【讨论】:

    • 或使用:open(my $fh, '
    • 是的,但您为什么要这样做? "$file_name" 中的引号没有用。简单的 $file_name 完全等同且更干净,可以启动。
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2018-02-14
    • 2018-02-17
    • 2013-07-11
    • 2017-10-23
    • 2011-01-31
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多