gpt4 book ai didi

perl - 需要帮助理解这个 Perl 片段

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

我正在阅读《Learning Perl》(第 6 版),发现了一个我无法破译的代码片段。第 14 章之后的一个练习要求构建一个程序,该程序将字符串和子字符串作为输入,然后找到该子字符串在字符串中出现的索引。

我是这样做的:

print "Enter a string: ";
chomp($string = <STDIN>);

print "Enter a substring: ";
chomp($sub = <STDIN>);

until ($index == -1) {
print $index, "\n" if defined($index);
$index = index($string, $sub, $index + 1);
}

在答案部分,他们展示了两种方式。一个很容易理解并且与我的相似,但另一个是故意混淆的:

print "Enter a string: ";
chomp($string = <STDIN>);

print "Enter a substring: ";
chomp($sub = <STDIN>);

for (my $pos = –1; –1 !=
($pos = index
+$string,
+$sub,
+$pos
+1
);
push @places, ((((+$pos))))) {
'for ($pos != 1; # ;$pos++) {
print "position $pos\n";#;';#' } pop @places;
}

print "Locations of '$sub' in '$string' were: @places\n";

我几乎不知道 for 循环中发生了什么。我知道它的形式是 for (initialize; test; increment) 并且它正在测试索引不是 -1,这意味着不再出现子字符串。但是对 $pos 的赋值是怎么回事呢?为什么+$pos 周围有这么多括号?在许多括号之后发生了什么?如果有人可以引导我完成第二部分,我将非常感激。请记住,我一周前才开始学习 Perl。

顺便说一句,我尝试运行他们的代码,但它给了我这个错误:

Unrecognized character \xE2; marked by <-- HERE after my $pos = <-- HERE near column 16 at ex14.obfs.pl line 1.

最佳答案

我稍微简化了您的示例,丢弃了无用的垃圾和注释。希望现在清楚发生了什么:

print "Please enter a string: ";
chomp(my $string = <STDIN>);
print "Please enter a substring: ";
chomp(my $sub = <STDIN>);

my @places;

for (my $pos = -1; -1 != ($pos = index $string, $sub, $pos+1); push @places, $pos)
{
#do nothing here
}

print "Locations of '$sub' in '$string' were: @places\n";

编译错误是因为'–'而不是'-';内部循环实际上是一个字符串文字(无用)加上注释(无用),额外的大括号也是无用的。

关于perl - 需要帮助理解这个 Perl 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477492/

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