需要了解此Perl代码段的帮助吗

需要了解此Perl代码段的帮助吗,perl,Perl,我正在阅读学习Perl(第6版),偶然发现了一个我无法破译的代码片段。第14章之后的一个练习要求构建一个以字符串和子字符串作为输入的程序,然后找到子字符串出现在字符串中的索引 我是这样做的: print "Enter a string: "; chomp($string = <STDIN>); print "Enter a substring: "; chomp($sub = <STDIN>); until ($index == -1) { print $inde

我正在阅读学习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 "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";
print“请输入字符串:”;
chomp(我的$string=);
打印“请输入子字符串:”;
chomp(我的$sub=);
我的位置;
对于(my$pos=-1;-1!=($pos=索引$string,$sub,$pos+1);push@places,$pos)
{
#在这里什么也不做
}
打印“$string”中“$sub”的位置为:@places\n”;
编译错误是由“-”而不是“-”引起的;
内部循环实际上是一个字符串文字(无用)加上注释(无用),额外的大括号也无用。

语法错误是因为您没有使用破折号,而是使用了endash或其他东西。删除“–”字符并将其替换为“-”字符,因为(A;B;C){D}大致上是
A;而(B){D}继续{C}
,大致是
A;(B)谢谢主席先生;现在我明白了。你能解释一下为什么变量名前的+符号不重要吗?这仅仅是因为您没有添加任何内容吗?一元加号有时用于调整语法和指导解析器,从函数的角度来看,它基本上是一个不可操作的命令。@a.Raj,一元加号
+
不执行加法。它实际上什么也不做。它用于消除语法歧义。例如,
{
可以启动一个表达式(散列构造函数),它可以启动一个块。如果Perl猜错了,你可以告诉它你想要哪一个。
+{…}
将强制将卷曲解释为表达式(因为表达式必须跟在
+
后面),从而作为散列构造函数。
{;…}
将被解释为一个块(因为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";