I disagree that the + should modify the comment. The comment should behave the same whether it is written (?#comment) or just as #comment\n when using /x. And I don't think anyone would argue that a + at the start of the next line should modify the #comment\n at the end of the previous line. Consider:
while( <DATA> ) {
print;
if( m/^([a-z_]\w+)=(\d{1,9}|[a-z_]\w*)$/ ) {
print "($1)($2)\n";
}
my( $key, $value );
( $key, $value )= m{
^
(
[a-z_] # Key name must start with a letter or '_'
\w # Subsequent characters can also be digits
+ # Key names must be at least 2 characters
)
=
( # The value can be:
\d # If it starts with a digit, it is an intege
+r
{1,9} # Only up to 9-digit values are allowed.
| # or, the value can be:
[a-z_] # An identifier must start with a letter or
+'_'
\w # Subsequent characters can also be digits
* # No length limit on IDs
)
$
}x && do {
print "# ($1)($2)\n";
print "# ($key)($value)\n";
};
( $key, $value )= m{
^
(
[a-z_] (?# Key name must start with a letter or '_')
\w (?# Subsequent characters can also be digits)
+ (?# Key names must be at least 2 characters)
)
=
( (?# The value can be:)
\d (?# If it starts with a digit, it is an inte
+ger)
{1,9} (?# Only up to 9-digit values are allowed.)
| (?# or, the value can be:)
[a-z_] (?# An identifier must start with a letter o
+r '_')
\w (?# Subsequent characters can also be digits
+)
* (?# No length limit on IDs)
)
$
}x && do {
print "(?# ($1)($2) )\n";
print "(?# ($key)($value) )\n";
};
print $/;
}
__END__
this=that
one=12
which outputs:
this=that
(this)(that)
# (this)(that)
# ()()
(?# (this)(that) )
(?# (1)() )
one=12
(one)(12)
# (one)(12)
# ()()
(?# (one)(12) )
(?# (1)() )
Note how $1 and $2 agree with me and only the return value from m// shows the indicated bug.
-
tye