这个函数有什么作用?
sub MyDigit {
return <<END;
0030\t0039
END
}
这称为“here-document”,用于将字符串拆分为多行,以替代连接或列表操作:
print "this is ",
"one line when printed, ",
"because print takes multiple ",
"arguments and prints them all!\n";
print "however, you can also " .
"concatenate strings together " .
"and print them all as one string.\n";
print <<DOC;
But if you have a lot of text to print,
you can use a "here document" and create
a literal string that runs until the
delimiter that was declared with <<.
DOC
print "..and now we're back to regular code.\n";
您可以在手册中阅读有关此处文档的更多信息:请参阅perldoc perlop。
你们都错过了重点!
\p{MyDigit}
它定义了一个用户定义的属性,用于\P{MyDigit}
正则表达式。
就像这些:
sub InKana {
return <<'END';
3040 309F
30A0 30FF
END
}
或者,您可以根据现有的属性名称来定义它:
sub InKana {
return <<'END';
+utf8::InHiragana
+utf8::InKatakana
END
}
您还可以使用“C<->”前缀进行设置减法。假设您只想要实际的字符,而不仅仅是字符的块范围。你可以像这样清除所有未定义的:
sub IsKana {
return <<'END';
+utf8::InHiragana
+utf8::InKatakana
-utf8::IsCn
END
}
您还可以使用“C”前缀从补充字符集开始:
sub IsNotKana {
return <<'END';
!utf8::InHiragana
-utf8::InKatakana
+utf8::IsCn
END
}
我想我一定是对的,因为我说的是前骆驼。:)
它使用一个叫做Here Document的东西来返回一个字符串“0030\t0039”
它返回字符串"0030\t0039\n"
(\t
作为一个制表符和\n
一个正在添加的换行符,因为该行以换行符结尾(显然))。
<<FOO
sometext
FOO
是所谓的heredoc,一种方便编写多行字符串的方式(虽然这里只使用了一行)。
您可以通过尝试一个简单的实验来帮助自己:
C:\Temp> cat t.pl
#!/usr/bin/perl
use strict; use warnings;
print MyDigit();
sub MyDigit {
return <<END;
0030\t0039
END
}
输出:
C:\温度> t | xxd 0000000: 2020 2020 3030 3330 0930 3033 390d 0a 0030.0039..
现在,在你的情况下,行END
首没有排列,所以你应该得到消息:
在 EOF 之前的任何地方都找不到字符串终止符“END”...