[英]Perl: basic question, function functionality
此功能有什么作用?
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";
您可以在手册中阅读有关here-documents的更多信息:请参见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
}
我想我一定是对的,因为我是前骆驼说话的 。 :)
它使用“ 这里文档”来返回字符串“ 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:\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 …
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.