从perl中的命令提示符获取输入

时间:2014-04-08 05:02:36

标签: perl command-prompt

我正在尝试编写一个脚本,我应该打开一个可以是任何文件的文件。

但我想从命令提示符或其他方式传递文件名,这样我就不必在输入文件名更改时编辑脚本。

任何人都可以帮忙我该怎么做?

        open (DBC, "test.txt")|| die "cant open dbc $!";
        @dbc =  <DBC>;
        close (DBC);

该文件位于我的脚本所在的目录中,这就是为什么我不在这里给出任何路径

2 个答案:

答案 0 :(得分:2)

您想使用ARGV数组来获取第一个参数:

my $file = $ARGV[0];
open (DBC, $file)|| die "cant open dbc $!";
@dbc =  <DBC>;
close (DBC);

有很多更好的方法可以最终做到这一点,比如检查以确保他们先传递一些东西:

if ($#ARGV == -1) {
    die "You need to supply a file name to the command";
}

my $file = $ARGV[0];
open (DBC, $file)|| die "cant open dbc $!";
@dbc =  <DBC>;
close (DBC);

你可以从那里继续,最终了解Getopt::Long和类似的模块。

答案 1 :(得分:0)

阅读perlop #I/O Operators以获取处理从命令行传递的文件的快捷方法。简要引用链接文档:

  

空文件句柄<>很特殊:它可用于模拟 sed awk 的行为,以及任何其他需要的文件名列表,对所有输入的每一行都做同样的事情。来自<>的输入来自标准输入,或来自命令行中列出的每个文件。以下是它的工作原理:第一次评估<>时,会检查@ARGV数组,如果它为空,$ARGV[0]设置为"-",打开时会给出@ARGV你的标准输入。然后将use strict; use warnings; die "$0: No filename specified\n" if @ARGV != 1; while (<>) { # Process your file line by line. } 数组作为文件名列表处理。

基本上,您可以将脚本简化为以下内容:

{{1}}
相关问题