gpt4 book ai didi

perl - 范围运算符如何处理常量,例如 `print if 2..4` ?

转载 作者:行者123 更新时间:2023-12-01 22:23:01 25 4
gpt4 key购买 nike

假设我有一个名为 text.txt 的文件,里面有这个

one
two
three
four
five

如果我在 perl 脚本中有这个

open($fh, '<', text.txt) or die "blah blah";
while(<$fh>){
print if 2..4;
}

它将打印二、三和四。 if 语句如何在后台将 $_ 与范围 2..4 进行比较?换句话说,如果我使用 $line 之类的不同变量而不是 $_,那么如果比较的话我必须写什么?

while(my $line = <$fh>){
print if........... 2..4 ?????????
}

谢谢。我喜欢 Perl,但有几件事我不明白它在后台是如何做的。

最佳答案

范围运算符和$. 内置变量之间有一定的魔力,这在perlop 的以下句子中有描述。 (强调我的):

If either operand of scalar ".." is a constant expression, that operand is considered true if it is equal (== ) to the current input line number (the $. variable).

本质上,$. 是处理的行数(从一个开始),与范围进行比较。您可以简单地使用命名变量获得相同的结果:

while (my $line = <$fh>) {
print $line if 2..4;
}

或者如果您更喜欢编写完整的 if 语句,则有一个等效的形式:

while (my $line = <$fh>) {
if (2..4) {
print $line;
}
}

完整的、独立的解决方案可以写成:

#!/usr/bin/env perl

use strict;
use warnings;

while (my $line = <DATA>) {
print $line if 2..4;
}

__DATA__
one
two
three
four
five

产生的输出为:

two
three
four

关于perl - 范围运算符如何处理常量,例如 `print if 2..4` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com