http://www.perlmonks.org?node_id=632495

hacker has asked for the wisdom of the Perl Monks concerning the following question:

I've got a snippet of code that I'm using to query definitions from dict.org, and am trying to sanitize/scrape the output, to format it a bit differently.

The problem begins when I try to detect the EOL (\n$) in each line returned. Here is the code thus far:

use strict; use warnings; use diagnostics; use Data::Dumper; use Net::Dict; my $word = $ARGV[0]; my $dict = Net::Dict->new('test.dict.org'); my $result = $dict->define("$word")->[1][1]; # This is where things don't work as intended # Original line # $result =~ 's,\n$,<br />,gsm'; # Fixed version below $result =~ s,\n,<br />,gsm; print $result;

What I'm trying to do, should be fairly straightforward, but I've tried various machinations to detect the end of line characters on each definition returned, and none of them seem to work properly.

Any help? What am I doing wrong here?

UPDATE: Thanks to the help of Limbic~Region and Corion on the CB, it turns out that wrapping my s,,,g in single quotes was killing it. I'm so used to doing that in perl one-liners in the shell, I just added them habitually to my script. Now it works. DOH!

Replies are listed 'Best First'.
Re: Massaging the Dictionary
by FunkyMonk (Chancellor) on Aug 14, 2007 at 14:05 UTC
    You've got your substitute in single quotes! Try $result =~ s,\n$,<br />,gsm. However, \n$ looks highly suspicious. I don't think that's what you want.

Re: Massaging the Dictionary
by moritz (Cardinal) on Aug 14, 2007 at 14:06 UTC
    If you want to insert the br-Tags, use this one:

    $ perl -wle '$_="a\nbc\nd";s{$}{<br />}gm; print' a<br /> bc<br /> d<br />

    This is your regex but without the additional \n.

    If you want to replace the line endings, use s{\n}{<br />}gm