Perl:基本问题,功能功能

时间:2010-11-27 20:35:08

标签: perl heredoc

这个功能有什么作用?

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

5 个答案:

答案 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 …