As there are no capture groups in the regex (i.e. no parentheses), using any other index than 0 makes no sense. Under warnings, you'd even get lots of Use of uninitialized value in print.
Moreover, when there's no match, the @- and @+ arrays are empty, there's no -1 (that's what index does). You have to handle that case yourself.
This should work directly as shown and output the expected output:
#!/usr/bin/perl use strict; use warnings; my $string = << "__EOS__"; foo bar baz foo bar foo\tbaz ccc ddd foo bar foo\tbaz ccc ddd\tfoo\tbar\tbaz foo bar foo\t\tbaz ccc ddd\t\t\tfoo __EOS__ open my $F0, '<', \$string or die $!; while (<$F0>) { my $match; while (/\t+/g) { $match = 1; print $-[0], ' ', $+[0], ' '; } print '-1 -1' unless $match; print "\n"; }
In reply to Re: printing LAST_MATCH_START/@- LAST_MATCH_END/@+ array where regex match begin/end
by choroba
in thread printing LAST_MATCH_START/@- LAST_MATCH_END/@+ array where regex match begin/end
by perl_boy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |