这个功能有什么作用?
sub MyDigit {
return <<END;
0030\t0039
END
}
答案 0 :(得分:8)
这称为"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。
答案 1 :(得分:7)
你们都错过了这一点!
它使用正则表达式定义用于\p{MyDigit}
和\P{MyDigit}
的用户定义属性。
就像这样:
sub InKana {
return <<'END';
3040 309F
30A0 30FF
END
}
或者,您可以根据现有属性名称定义它:
sub InKana {
return <<'END';
+utf8::InHiragana
+utf8::InKatakana
END
}
你也可以使用“C&lt; - &gt;”来设置减法字首。假设你只是 想要实际的字符,而不仅仅是块的字符范围。 你可以清除所有未定义的像这样:
sub IsKana {
return <<'END';
+utf8::InHiragana
+utf8::InKatakana
-utf8::IsCn
END
}
您也可以使用“C”前缀来补充字符集:
sub IsNotKana {
return <<'END';
!utf8::InHiragana
-utf8::InKatakana
+utf8::IsCn
END
}
我认为我一定是对的,因为我说的是 ex camelis 。 :)
答案 2 :(得分:2)
它使用名为Here Document的东西来返回字符串“0030 \ t0039”
答案 3 :(得分:2)
它返回字符串"0030\t0039\n"
(\t
是一个标签,\n
是一个换行符,因为该行以换行符结束(显然)。)
<<FOO
sometext
FOO
是一种所谓的heredoc,一种方便地编写多行字符串的方法(虽然这里只用了一行)。
答案 4 :(得分:0)
您可以尝试一个简单的实验来帮助自己:
C:\Temp> cat t.pl
#!/usr/bin/perl
use strict; use warnings;
print MyDigit();
sub MyDigit {
return <<END;
0030\t0039
END
}
输出:
C:\Temp> t | xxd 0000000: 2020 2020 3030 3330 0930 3033 390d 0a 0030.0039..
现在,在你的情况下,END
没有排在行的开头,所以你应该收到消息:
Can't find string terminator "END" anywhere before EOF at …