perl - 如何从命令行获取文件句柄?

标签 perl filehandle

我有一个将文件句柄作为参数的子例程。如何从命令行上指定的文件路径创建文件句柄?我不想自己对这个文件做任何处理,我只想把它传递给另一个子程序,它返回一个包含文件中所有解析数据的哈希数组。

这是我使用的命令行输入的样子:
$ ./getfile.pl /path/to/some/file.csv
这是我正在调用的子程序的开头部分:

sub parse {
    my $handle = shift;
    my @data   = <$handle>;
    while (my $line = shift(@data)) {
      # do stuff
    }
}

最佳答案

命令行参数在预定义的 @ARGV 中可用大批。您可以从那里获取文件名并使用 open打开它的文件句柄。假设您想要对该文件进行只读访问,您可以这样做:

my $file = shift @ARGV;
open(my $fh, '<', $file) or die "Can't read file '$file' [$!]\n";
parse($fh);

请注意 or die...查看电话open成功,如果不是,则以错误消息死亡。内置变量$!将包含失败时的(依赖于操作系统的)错误消息,告诉您调用不成功的原因。例如“没有权限。”

关于perl - 如何从命令行获取文件句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189293/

相关文章:

python - 关闭 ipython 中所有打开的文件

ruby - Ruby 在哪里跟踪其打开的文件描述符?

perl - 如何以编程方式生成多个 Perl 文件句柄?

perl - 可以钩住DATA handle 的开口吗?

perl - 如何在 Ubuntu 中一次安装所有 perl 模块

perl - 如何使用 Perl 创建符号链接(symbolic link)?

perl - 如何在 Perl 中编写一个简单的 HTTP 代理?

perl - 是否有一个 perl 模块可以启动一个进程并将三个主要 I/O 句柄返回给该进程?

perl - 在 moose 中定义文件句柄属性

javascript - 将带有 Perl 变量的内联 javascript 更改为函数