Help - Search - Member List - Calendar
Full Version: small help with map function
WorkTheWeb Forums > Webmaster Resources > Perl Beginner Help
Support our Sponsors!
N. Ganesh Babu
Dear All,

My test is as follows:

$line = "jlla jldsfjlfj lfla (1p=n-5) fk (2) ljljj ljlfaufi lfjlakfh
(10, 11) lfjdlaj (10, 11p=n-15) ndsfdjksnk (2, 15, 16) dkhfak";

my output of the $line should be like this.

$line = "jlla jldsfjlfj lfla (<lr=C1>1</lr>p=n-<lr=C5>5</lr>) fk
(<lr=C2>2</lr>) ljljj ljlfaufi lfjlakfh (<lr=C10>10</lr>,
<lr=C11>11</lr>) lfjdlaj (<lr=C10>10</lr>,
<lr=C11>11</lr>p=n-<lr=C15>15</lr>) ndsfdjksnk (<lr=C2>2</lr>,
<lr=C15>15</lr>, <lr=C16>16</lr>) dkhfak";

my code is as follows:

$line=~s!(([1-9]{1,3}((,
|\p=n-\)[1-9]{1,3})*))!(@{[map"<lr=C$_>$_</lr>",split"(,
|\p=n-\)",$1]})!g;

I am getting the following error:

Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE , |p=n-)/ at
s.pl line 8.

Please help in rectifing the error mentioned.

Thanks and Regards,
Ganesh

Ing. Branislav Gerzo
N. Ganesh Babu [NGB], on Monday, July 04, 2005 at 12:32 (+0530) typed
the following:


NGB> $line=~s!(([1-9]{1,3}((,
NGB> |\p=n-\)[1-9]{1,3})*))!(@{[map"<lr=C$_>$_</lr>",split"(,
NGB> |\p=n-\)",$1]})!g;

NGB> I am getting the following error:

NGB> Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE , |p=n-)/ at
NGB> s.pl line 8.

I will not decode your regexp, but I think you should escape "(", as
you did just before map function.

--

How do you protect mail on web? I use http://www.2pu.net

["Ah, Ponch and John are calling..." -- Mike Nelson]

John W. Krahn
N. Ganesh Babu wrote:
QUOTE
Dear All,

Hello,

QUOTE
My test is as follows:

$line = "jlla jldsfjlfj lfla (1p=n-5) fk (2) ljljj ljlfaufi  lfjlakfh
(10, 11) lfjdlaj (10, 11p=n-15) ndsfdjksnk (2, 15, 16) dkhfak";

Backslashes are interpolated in double quoted strings. Perhaps you meant to
escape the backslashes or use a single quoted string instead?


QUOTE
my output of the $line should be like this.

$line = "jlla jldsfjlfj lfla (<lr=C1>1</lr>p=n-<lr=C5>5</lr>) fk
(<lr=C2>2</lr>) ljljj ljlfaufi  lfjlakfh (<lr=C10>10</lr>,
<lr=C11>11</lr>) lfjdlaj (<lr=C10>10</lr>,
<lr=C11>11</lr>p=n-<lr=C15>15</lr>) ndsfdjksnk (<lr=C2>2</lr>,
<lr=C15>15</lr>, <lr=C16>16</lr>) dkhfak";

my code is as follows:

$line=~s!(([1-9]{1,3}((,
|\p=n-\)[1-9]{1,3})*))!(@{[map"<lr=C$_>$_</lr>",split"(,
|\p=n-\)",$1]})!g;

I am getting the following error:

Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE , |p=n-)/ at
s.pl line 8.

Please help in rectifing the error mentioned.

Your problem is that the replacement string is being evaluated as well as
interpolated so "\)" becomes ")" after interpolation and ")" after evaluation.

You want something like:

$line =~ s!(([^)]+))! ( my $x = $1 ) =~ s-(d+)-<lr=C$1>$1</lr>-g; $x !eg;



John
--
use Perl;
program
fulfillment

N. Ganesh Babu
Hi John,

Thank you very much for your help. As I remember this is the 4th
question you have answered to me. Thanks once again.

Regards,
Ganesh

John W. Krahn wrote:

QUOTE
N. Ganesh Babu wrote:

Dear All,


Hello,

My test is as follows:

$line = "jlla jldsfjlfj lfla (1p=n-5) fk (2) ljljj ljlfaufi
lfjlakfh (10, 11) lfjdlaj (10, 11p=n-15) ndsfdjksnk (2, 15, 16)
dkhfak";


Backslashes are interpolated in double quoted strings.  Perhaps you
meant to escape the backslashes or use a single quoted string instead?


my output of the $line should be like this.

$line = "jlla jldsfjlfj lfla (<lr=C1>1</lr>p=n-<lr=C5>5</lr>) fk
(<lr=C2>2</lr>) ljljj ljlfaufi  lfjlakfh (<lr=C10>10</lr>,
<lr=C11>11</lr>) lfjdlaj (<lr=C10>10</lr>,
<lr=C11>11</lr>p=n-<lr=C15>15</lr>) ndsfdjksnk (<lr=C2>2</lr>,
<lr=C15>15</lr>, <lr=C16>16</lr>) dkhfak";

my code is as follows:

$line=~s!(([1-9]{1,3}((,
|\p=n-\)[1-9]{1,3})*))!(@{[map"<lr=C$_>$_</lr>",split"(,
|\p=n-\)",$1]})!g;

I am getting the following error:

Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE , |p=n-)/
at s.pl line 8.

Please help in rectifing the error mentioned.


Your problem is that the replacement string is being evaluated as well
as interpolated so "\)" becomes ")" after interpolation and ")"
after evaluation.

You want something like:

$line =~ s!(([^)]+))! ( my $x = $1 ) =~ s-(d+)-<lr=C$1>$1</lr>-g;
$x !eg;



John



PHP Help | Linux Help | Web Hosting | Reseller Hosting | SSL Hosting
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2005 Invision Power Services, Inc.