SPUG: Inspired, broken.

Tim Maher tim at consultix-inc.com
Wed Feb 9 13:11:24 PST 2005

On Wed, Feb 09, 2005 at 12:52:47PM -0800, Atom Powers wrote:
> Inspired by last night's presentation at the Seattle Unix Group I put 

Glad to hear that! 8-}

> together this perl one-liner to grab email addresses out of a file.
> It works, but I need to save the output to a file, "recipients.txt", and 
> I'm having trouble.
> What is the best way to save the output to a file?
> #perl5 -wnl -e 'm/\w+@\w+\.\w{3}/ and print lc($&)." OK";' address_list.txt
> I've tried this:
> >perl5 -wnl -e 'm/\w+@\w+\.\w{3}/ and print lc($&)." OK";' address_list.txt > recipients.txt
> recipients.txt: Permission denied.

That format /will/ work, assuming you're in a directory for which
you have write permission when you issue the command.

As a general rule, you should backslash the @ within the matching
operator's // delimiters, because it will in some cases be taken
for the start of an array name otherwise.  And double-quotes make
string construction easier:

> #perl5 -wnl -e 'm/\w+@\w+\.\w{3}/ and print lc($&)." OK";' address_list.txt
> #perl5 -wnl -e 'm/\w+\@\w+\.\w{3}/ and print "\L$&\E OK";' address_list.txt

By the way, does that #perl mean that you were running the command
as root?  I wouldn't recommend that until you are more sure about
what you're doing!

> And this:
> >perl5 -wnl -e 'm/\w+@\w+\.\w{3}/ and print { ">recipients" } lc($&)." 
> OK";' address_list.txt

That's a good guess for how Perl might work for a guy who knows AWK,
but it doesn't work that way in Perl.  The output redirection approach
is by far the easiest, so cd to an appropriate directory, and use that
first command format again.

| Tim Maher, PhD     (206) 781-UNIX      (866) DOC-PERL     (866) DOC-UNIX |
| tim(AT)Consultix-Inc.Com  http://TeachMePerl.Com  http://TeachMeUnix.Com |
|      Watch for my upcoming book: "Minimal Perl for UNIX/Linux People"    |

More information about the spug-list mailing list