perl6 无法初始化状态变量。需要帮助
perl6 Unable to initialize a state variable. Help needed
我想使用单行打印文件的中间部分,方法是使用状态变量指示当前行是否在文件的所需部分内。但是我无法初始化状态变量。初始化是如此简单,我就是找不到问题所在。请帮忙。谢谢
文件名为 testFile.txt,包含以下行:
section 0; state 0; not needed
= start section 1 =
state 1; needed
= end section 1 =
section 2; state 2; not needed
而我的一线是
cat testFile.txt | perl6 -ne ' state $x = 0; say "$x--> "; if $_ ~~ m/ "start" / { $x=1; }; if $x == 1 { .say; }; if $_ ~~ m/ "end" / { $x = 2; }'
并且输出显示 $x=0 没有进行初始化:
Use of uninitialized value $x of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in block at -e line 1
-->
Use of uninitialized value of type Any in numeric context
in block at -e line 1
Use of uninitialized value $x of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in block at -e line 1
-->
= start section 1 =
1-->
state 1; needed
1-->
= end section 1 =
2-->
2-->
这对我来说像是一个错误:显然,-n
没有正确设置词法环境。
作为一种变通方法,您可以将所有内容包装在一个块中,例如,通过使用 do { ... }
或什至只使用 { ... }
.
来包围您的代码
另请注意,根据您的用例,使用 flip-flop operator 可以简化整个过程,例如
cat testFile.txt | perl6 -ne '.say if / "start" / ff / "end" /'
我想使用单行打印文件的中间部分,方法是使用状态变量指示当前行是否在文件的所需部分内。但是我无法初始化状态变量。初始化是如此简单,我就是找不到问题所在。请帮忙。谢谢
文件名为 testFile.txt,包含以下行:
section 0; state 0; not needed
= start section 1 =
state 1; needed
= end section 1 =
section 2; state 2; not needed
而我的一线是
cat testFile.txt | perl6 -ne ' state $x = 0; say "$x--> "; if $_ ~~ m/ "start" / { $x=1; }; if $x == 1 { .say; }; if $_ ~~ m/ "end" / { $x = 2; }'
并且输出显示 $x=0 没有进行初始化:
Use of uninitialized value $x of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in block at -e line 1
-->
Use of uninitialized value of type Any in numeric context
in block at -e line 1
Use of uninitialized value $x of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in block at -e line 1
-->
= start section 1 =
1-->
state 1; needed
1-->
= end section 1 =
2-->
2-->
这对我来说像是一个错误:显然,-n
没有正确设置词法环境。
作为一种变通方法,您可以将所有内容包装在一个块中,例如,通过使用 do { ... }
或什至只使用 { ... }
.
另请注意,根据您的用例,使用 flip-flop operator 可以简化整个过程,例如
cat testFile.txt | perl6 -ne '.say if / "start" / ff / "end" /'