我正在尝试编写一个脚本,我应该打开一个可以是任何文件的文件。
但我想从命令提示符或其他方式传递文件名,这样我就不必在输入文件名更改时编辑脚本。
任何人都可以帮忙我该怎么做?
open (DBC, "test.txt")|| die "cant open dbc $!";
@dbc = <DBC>;
close (DBC);
该文件位于我的脚本所在的目录中,这就是为什么我不在这里给出任何路径
答案 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}}