8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

尝试在文件末尾插入一行时出现 perl 错误

NMR 2月前

109 0

我在 perl 文件中有以下代码。此命令的目的是在 file.txt.system(\' find . -type f -name file.txt | xargs sed -i -e \'$ ... 的末尾添加一行 \'- - test 0\'

我在 perl 文件中有以下代码。此命令的目的是在 file.txt 末尾添加一行 \'- - test 0\'。

system(" find  . -type f -name file.txt | xargs sed -i -e "$ a- - test 0" ");

当我尝试运行脚本时,出现如下所示的错误。

Scalar found where operator expected at timeStampConfig.pl line 24, near "" find  . -type f -name file.txt | xargs sed -i -e "$ a"
    (Missing operator before $ a?)
Number found where operator expected at timeStampConfig.pl line 24, near "test 0"
    (Do you need to predeclare test?)
String found where operator expected at timeStampConfig.pl line 24, near "0" ""
    (Missing operator before " "?)
syntax error at timeStampConfig.pl line 24, near "" find  . -type f -name file.txt | xargs sed -i -e "$ a"
Execution of timeStampConfig.pl aborted due to compilation errors.

我尝试从命令提示符执行下面的行并且运行良好。

find . -type f -name file.txt | xargs sed -i -e '$ a- - test 0'

我也尝试使用单引号,如下所示,但最终出现错误。

system("find  . -type f -name file.txt | xargs sed -i -e '$ a- - test 0'");

sed: -e expression #1, char 1: unknown command: `-'

我是 perl 新手,需要一些帮助。

帖子版权声明 1、本帖标题:尝试在文件末尾插入一行时出现 perl 错误
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由NMR在本站《perl》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 原型会改变用它们声明的函数的解析规则。因此,为了将其考虑在内, 必须 函数的 sub foo(); 预声明 (

    如果函数调用出现在函数定义或预声明之前,则只能将其解析为普通(非原型)调用,前提是解释器首先可以确定它是一个函数。(在此示例中,由于括号,因此可以。)

    然后,一旦定义出现,指示的原型就不会对已解析的调用产生影响。但是,在函数定义(或预声明)之后,对该函数的进一步调用都是原型化的。另外还添加了一点:

    use 5.016;
    
    fun_proto(42);      # runtime warning: 
                        # "called too early to check prototype"
    
    sub fun {
        fun_proto(42);  # parsed as a normal sub as no prototype has been seen
    }
    
    sub fun_proto() { 
        say "@_";
    }
    
    fun();              # fun_proto(42) call in 'fun' is OK
    
    fun_proto(43);      # compilation error: extra argument by prototype 
    

    函数定义之前的直接调用会在运行时引发警告,但另一个子程序内部的调用不会。我不知道为什么来自子程序的调用不会收到警告。(包含调用的子程序的调用 fun_proto(42) 出现在 fun_proto 定义之后,但所有这些(封闭的子程序和 fun_proto 其中的调用)都在定义之前进行编译。)

    要修复代码,请在提及函数之前添加预声明(“前向声明”)。在此示例中,这将是一个语句 sub fun_proto();

    也许你确切地知道自己在做什么,但我不得不问:你的代码中真的需要原型吗?它们很微妙,但它们的目的仅仅是允许像调用内置函数一样调用用户定义的子函数,而 不是检查参数的数量和类型 .

    如果目的是检查参数,那么自 v5.20 perl 以来,它具有适当的 子程序签名 .


    一个真正的问题是,代码的编译方式取决于原型,因此当它们没有按预期应用时(如这里),可能会导致安静的错误。一个简单的例子:

    sub fun() { ... }
    

    当调用该子程序(不带括号)时,其调用之后的任何内容都不会作为其参数——因为它不接受任何参数!——所以

    fun + 3     # intended to be compiled with regards to () prototype
    

    稍后(虽然很棘手)运行为

    fun() + 3   # sub declared w/ prototype to take no arguments
    

    但是,如果该原型定义不适用于此调用(如本问题中的示例),则表达式中 sub 后面的内容作为其参数列表,因此代码将被编译为

    fun(+3)     # oups, not intended (prototype unused by error)
    

    没有警告。

返回
作者最近主题: