0

バインディング式以外でキャプチャ グループを使用し、すべてのグループをキャプチャする方法はありますか?

#!/usr/bin/perl

use strict;
use warnings;

countDays(1,"2015-3-21","2016-3-24");

sub countDays {
    die "Check formatting"
        unless ($_[0] =~ m/([1-7])/ &&
                $_[1] =~ m/^(\d{4})-(\d{1,2})-(\d{1,2})$/ &&
                $_[2] =~ m/^(\d{4})-(\d{1,2})-(\d{1,2})$/);

            # testing
            print "$1\n$2\n$3\n$4\n$5\n$6\n$6\n";

}

これは、最後の 3 つのグループ ( $1$2、および) のみをキャプチャし$3ます。

Avinash Raj が提案したように、期待される出力を編集します。

1
2015
3
21
2016
3
24
4

2 に答える 2

6

いいえ、一致が成功するたびに、すべてのキャプチャ変数がリセットされます。しかし、これを行うことができます:

sub countDays {
    my @match1 = $_[0] =~ m/([1-7])/
        and
    my @match2 = $_[1] =~ m/^(\d{4})-(\d{1,2})-(\d{1,2})$/
        and
    my @match3 = $_[2] =~ m/^(\d{4})-(\d{1,2})-(\d{1,2})$/
        or die "Check formatting";

    print "@match1\n@match2\n@match3\n";
}
于 2015-08-15T15:23:48.240 に答える
1
#!/usr/bin/env perl
use strict;
use warnings;

countDays(1,"2015-3-21","2016-3-24");

sub countDays {
    my $countDays = join ',', @_;

    die "Check formatting"
        unless $countDays =~
            m/([1-7]),(\d{4})-(\d{1,2})-(\d{1,2}),(\d{4})-(\d{1,2})-(\d{1,2})/;

    # testing
    print "$1\n$2\n$3\n$4\n$5\n$6\n$7\n";
}
于 2015-08-16T05:52:53.800 に答える