其中一个模块中已经存在一个 perl 脚本,我想了解/知道它是如何工作的以及传递的参数的含义。
\n\n我试图找到在线传递的参数的描述,但是我找不到任何好的资源来解释它。
\n\nperl -p -i -e 's/\xc3\xbf//g' filename\nRun Code Online (Sandbox Code Playgroud)\n\n请帮助理解工作流程。
\n-p暗示在引号中的代码周围存在与此类似的循环:while(<>){ ..... } continue{print}。
-i意味着“就地编辑”,这意味着您更改的每个逻辑记录(通常是一行)将导致文件中该行的更改。
-e意味着评估后面的字符串作为代码并执行它。由于您使用的是-p,因此代码字符串将在隐式 while 循环中执行,如上所述。
s///是替换运算符。它作用于 的内容,$_除非它使用 绑定到其他一些标量=~。您的隐式“while”循环$_在每次迭代时填充输入文件中的一条记录(在本例中,每次迭代从输入文件中填充一行)。因此,在每一行中,每当该字符出现在该行中时,您都会用\xc3\xbf该字符替换空字符串(换句话说,删除该字符)。
您应该使用perldoc探索 Perl 的内置文档来了解以下主题:
perldoc perlintro- Perl 简介。perldoc perlretut- Perl 正则表达式教程。perldoc perlre- Perl 正则表达式的更深入描述。perldoc perlrun- Perl 命令行开关(例如 、 等)的-p解释-e。perldoc perlop- Perl 运算符的解释,包括<>、 和s///。perldoc -f print- Perl 函数如何print工作的描述(由 暗示-p)。perldoc -f definedperldoc -f readlineperldoc perlsyn- Perl 语法的描述,包括while(){}循环(-p暗示 while 循环)。如果你把所有这些放在一起,那一个班轮的作用与此非常接近:
\n\nBEGIN { $^I = ""; } # Set in-place edit mode.\nour $oldargv = \'\'; # Placeholder or sentinel flag.\nwhile (defined($_ = readline ARGV)) { # ARGV will be the currently\n # opened file from commandline.\n if ($ARGV ne $oldargv) {\n open ARGVOUT, \'>$ARGV\'; # Open an output file; same name\n # as input file, but ARGV still\n # reads from original.\n select ARGVOUT; # Output goes to ARGVOUT.\n $oldargv = $ARGV; # Keep track of what filename we\n # are reading from.\n }\n\n $_ =~ s/\xc3\xbf//g; # Do our work... substitute.\n\n}\ncontinue {\n print $_; # After each iteration print the\n # content of $_ to ARGVOUT.\n}\nEND {\n select STDOUT;\n close ARGVOUT;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是通过使用 Perl 模块 B::Deparse 以及深入了解 Perl 文档拼凑而成的近似表示。Perl 的文档非常广泛,并且可在任何标准安装了 Perl 的系统上使用。您可以通过在命令行输入以下内容来阅读 Perl 的文档:perldoc perl####其中####代表文档名称。例子:perldoc perldata。如果您想查找特定的 Perl 函数,您可以使用-f开关,如 中所示perldoc -f open。如果您想阅读有关 Perl 模块的文档,您可以键入perldoc ModuleName(例如,perldoc Scalar::Util)。
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |