Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Perl is to stupid to understand this 1 liner.

From: carl:cybercraft at: 16-Dec-2001 8:20

On 15-Dec-01, Joel Neely wrote:
>> 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.
Fair enough, though there is a "read", a "parse" and a "change" in my REBOL example which does give some indication of what's being done with the file-name, while the file-name is the only thing any outsider would recognise in your Perl example.
> 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-
-- Carl Read