|
|
On Mon, Nov 9, 2009 at 8:30 PM, tom smith <climbingpartners@xxxxxxxxx>wrote:
>
> On Mon, Nov 9, 2009 at 10:56 AM, Jim Gibson <jimsgibson@xxxxxxxxx> wrote:
>
>> However, here is a shortened form using regular expression:
>>
>> my @output = $line =~ m{ \G (..) .. }gx;
>>
>> Verify how either of these works when you do not have a multiple of 2
>> characters in your input.
>>
>>
> It has other problems too:
>
> use strict;
> use warnings;
> use 5.010;
>
> my $str = "ab--cd--ef";
> my @pieces = $str =~ /\G(..)../g;
> say "@pieces";
>
>
> The output is:
>
> ab cd
>
> Note that the last two characters 'ef' were not included in the result.
> You need a multiple of 4 characters in the string for that regex to work
> correctly.
>
>
This works:
----
use strict;
use warnings;
use 5.010;
my $str = "ab--cd--ef";
my @pieces = $str =~ /\G(..)(?:..)?/gx;
say "@pieces";
----
The output is: ab cd ef. The non-capturing parentheses (?:) allow you to
apply a ? to the group, yet not have the match for that group inserted in
the results list.
|
|