1

这个函数有什么作用?

    sub MyDigit {
       return <<END;
       0030\t0039
       END
    }
4

5 回答 5

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

于 2010-11-27T20:38:31.993 回答
7

你们都错过了重点!

\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
  }

我想我一定是对的,因为我说的是前骆驼。:)

于 2010-11-27T22:40:05.847 回答
2

它使用一个叫做Here Document的东西来返回一个字符串“0030\t0039”

于 2010-11-27T20:38:11.057 回答
2

它返回字符串"0030\t0039\n"\t作为一个制表符和\n一个正在添加的换行符,因为该行以换行符结尾(显然))。

<<FOO
sometext
FOO

是所谓的heredoc,一种方便编写多行字符串的方式(虽然这里只使用了一行)。

于 2010-11-27T20:38:57.937 回答
0

您可以通过尝试一个简单的实验来帮助自己:

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”...
于 2010-11-27T20:45:40.283 回答