[REBOL] Re: Perl is to stupid to understand this 1 liner.
From: joel:neely:fedex at: 15-Dec-2001 5:12
Hi, Carl,
Carl Read wrote:
> I planned to use a rule at the start, but then noticed that just a
> check of length would do the trick. But then Joel changed the
> rules... (;
>
Moi? "Changed"? Mais non! Just "clarified" for those who don't
read REs (but can't everybody read regular expressions? ;-)
>
> > Well, on the other hand
> > not so straightforward as your Perl example ...
>
> Perhaps Joel would now like to write a version in Perl that's
> designed to be as clear as possible as apposed to as short as
> possible?
>
To the everyday Perl hacker, what I published actually is both!
No, really! ;-) The only things I could do to obviousify the
script would be to write an explicit read/print loop (that's
what the -p switch does) and embed comments in the RE that
is the match pattern for the substitution. That would give us
something like the following:
8<----------
#!/usr/bin/perl -w
while (<>) { # loop over all input (all file arguments)
s/ # substitute in current line for this pattern...
\b # boundary (e.g. whitespace or beginning of line)
( # begin subpattern
\d{3} # exactly three digits
- # followed by a hyphen
)? # end subpattern and make it optional
\d{3} # exactly three digits
- # followed by a hyphen,
\d{4} # exactly four more digits, and
\b # a boundary (whitespace or end of line)
/####/gx; # ... four octothorps wherever possible
print; # print current line after substitution(s)
}
8<----------
but the addition of all the comments is hardly an improvement to
a Perl programmer. That would be like showing someone who knows
elementary algebra a paragraph of text that describes the quadratic
formula, instead of simply writing (pardon the ASCII art...)
____________
+ / 2
-b - / b - 4 a c
V
-------------------
2 a
The notation really is intended to be minimalist; the price of
using it is taking a little time to learn something new, as is
the case with all programming languages. I suspect the person
that has never seen REBOL before would find the comparable
PARSE rule less than obvious as well.
Of course, I could define variables to hold the parts of the RE
and give them mnemonic names ...
8<----------
#!/usr/bin/perl -w
my $areacode = '(\d{3}-)?'; # 3 digits and hyphen, optional
my $exchange = '\d{3}-'; # 3 digits and hyphen
my $localine = '\d{4}'; # 4 digits
my $phonenbr = "$areacode$exchange$localine";
while (<>) { # loop over all input
s/\b$phonenbr\b/####/gx; # hiding phone numbers in each line
print; # and print the line
}
8<----------
... but anyone who knows Perl will see that I had to do something
subtle to make that work.
Perhaps that would be more readable to some? What would one do
in REBOL to make the PARSE rules more obvious to someone who
doesn't speak REBOL as a native?
-jn-
--
The hardest problem in computer science is finding a problem to
solve your solution.
-- Aaron Watters
joel(dot(FIX(PUNCTUATION(neely(at(fedex(dot(com