1

この関数は何をしますか?

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

5 に答える 5

8

これは「ヒアドキュメント」と呼ばれ、連結またはリスト操作の代わりに、文字列を複数行に分割するために使用されます。

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";

マニュアルのヒアドキュメントについて詳しくは、perldocperlopを参照してください。

于 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

ヒアドキュメントと呼ばれるものを使用して、文字列「0030\t0039」を返します。

于 2010-11-27T20:38:11.057 に答える
2

文字列を返します"0030\t0039\n"(行が(明らかに)改行で終わるために追加される\tタブと改行です)。\n

<<FOO
sometext
FOO

いわゆるヒアドキュメントであり、複数行の文字列を便利に記述する方法です(ただし、ここでは1行のみで使用されます)。

于 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:\ Temp> t | xxd
0000000:2020 2020 3030 3330 0930 3033 390d 0a 0030.0039 ..

さて、あなたの場合、ENDは行の先頭に並んでいないので、次のメッセージが表示されているはずです。

EOFの前のどこにも文字列ターミネータ「END」が見つかりません…
于 2010-11-27T20:45:40.283 に答える