我试图在if语句中使用范围运算符,只要$ b的值在1到3之间就打印出来,但下面的代码会进入无限循环.我不确定if语句中的range运算符是如何工作的.
#!/usr/bin/perl
use warnings;
for ($b = 0; $b < 10; $b++) {
if ($b = 1 .. 3) {
print "test\n";
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
一个范围操作..不工作,你正在尝试使用它的方式.您if的等同于以下内容:
if ( $b = ($. == 1) .. ($. == 3) ) {
Run Code Online (Sandbox Code Playgroud)
因为您没有进行任何文件操作,所以$.将是未定义的.因此,范围将始终发出警告并失败并将undef分配给$b.然后因为$b被赋值,for循环将永远不会退出.
你需要使用简单的比较器:
#!/usr/bin/perl
use warnings;
for ( $b = 0; $b < 10; $b++ ) {
if ( $b >= 1 && $b <= 3 ) {
print "test\n";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
test
test
test
Run Code Online (Sandbox Code Playgroud)
..在标量上下文中不是范围运算符,它是触发器操作符.你会像这样适当地使用它:
while ( my $line = readline $filehandle ) {
# print only first three lines
if ( 1..3 ) {
print "line $.: $line\n";
}
}
Run Code Online (Sandbox Code Playgroud)
触发器返回false直到第一个条件(常量被隐式处理为需要与$.进行比较,当前行号)返回true.然后它继续返回true直到第二个条件为真.因此,在上面的示例中,仅为输入的第1行到第3行输入if块.
无限循环是因为每次循环都要为$ b分配''; 也许你的意思是==(比较),而不是=(任务).但即便如此,也不会像你尝试的方式一样.
如果要检查数字是否在给定范围内,请不要使用范围运算符或触发器运算符; 只是比较:
if ( $b >= 1 && $b <= 3 ) {
Run Code Online (Sandbox Code Playgroud)