… | |
… | |
31 | |
31 | |
32 | =cut |
32 | =cut |
33 | |
33 | |
34 | package Perl::LibExtractor; |
34 | package Perl::LibExtractor; |
35 | |
35 | |
36 | our $VERSION = '1.0'; |
36 | our $VERSION = '0.1'; |
37 | |
37 | |
38 | use Config; |
38 | use Config; |
39 | use File::Spec (); |
39 | use File::Spec (); |
40 | use File::Temp (); |
40 | use File::Temp (); |
41 | |
41 | |
… | |
… | |
553 | =cut |
553 | =cut |
554 | |
554 | |
555 | sub add_eval { |
555 | sub add_eval { |
556 | my ($self, $eval) = @_; |
556 | my ($self, $eval) = @_; |
557 | |
557 | |
|
|
558 | (my $file = substr $eval, 0, 64) =~ s/\015?\012/\\n/g; |
|
|
559 | |
558 | my $pkg = "libextractor" . ++$self->{count}; |
560 | my $pkg = "libextractor" . ++$self->{count}; |
559 | $eval =~ s/\x00/\x00."\\x00".q\x00/g; |
561 | $eval =~ s/\x00/\x00."\\x00".q\x00/g; |
560 | $self->_trace ($eval, |
562 | $self->_trace ($file, |
561 | "local \$^H = \$^H;" # vvvvvvvvvvvvvvvvvvvv = use strict; use utf8 |
563 | "local \$^H = \$^H;" # vvvvvvvvvvvvvvvvvvvv = use strict; use utf8 |
562 | . "eval q\x00package $pkg; BEGIN { \$^H = \$^H | 0x800600 } $eval\x00; die \"\$\@\" if \$\@;\n" |
564 | . "eval q\x00package $pkg; BEGIN { \$^H = \$^H | 0x800600 } $eval\x00; die \"\$\@\" if \$\@;\n" |
563 | ); |
565 | ); |
564 | } |
566 | } |
565 | |
567 | |
… | |
… | |
637 | =cut |
639 | =cut |
638 | |
640 | |
639 | sub add_core_support { |
641 | sub add_core_support { |
640 | my ($self) = @_; |
642 | my ($self) = @_; |
641 | |
643 | |
642 | $self->add_eval ('my $v; open my $fh, "<", \$v'); |
644 | $self->add_eval (' |
643 | $self->add_eval ('my $x = chr 1234; "\u$x\U$x\l$x\L$x"; $x =~ /\d|\w|\s|\b|\R|\h|\v|$x/i'); |
645 | # PerlIO::Scalar |
|
|
646 | my $v; open my $fh, "<", \$v; |
|
|
647 | |
|
|
648 | # various unicore regex/builtin gambits |
|
|
649 | my $x = chr 1234; |
|
|
650 | "\u$x\U$x\l$x\L$x"; |
|
|
651 | $x =~ /$_$x?/i |
|
|
652 | for qw(\d \w \s \b \R \h \v); |
644 | $self->add_eval ('split " ", chr 1234'); # usually covered by the regex above |
653 | split " ", $x; # usually covered by the regex above |
|
|
654 | '); |
|
|
655 | |
645 | $self->add_eval ('/\x{1234}(?<a>)\g{a}/') if $] >= 5.010; # usually covered by the regex above |
656 | $self->add_eval ('/\x{1234}(?<a>)\g{a}/') if $] >= 5.010; # usually covered by the regex above |
646 | } |
657 | } |
647 | |
658 | |
648 | =item $extractor->add_unicore |
659 | =item $extractor->add_unicore |
649 | |
660 | |