[sf-perl] Plucking from a string

Neil Heller nheller at silcon.com
Thu May 22 16:40:26 PDT 2008


You win the gold star!

One question though.  In the line

 

while ($theline =~ /($TARGETSTR\d+)/gi) {  print "$1\n"; }

 

why did you use the parens "(" and ")" inside the real expression?

 

 

Neil Heller

 

 

From: sanfrancisco-pm-bounces+nheller=silcon.com at pm.org
[mailto:sanfrancisco-pm-bounces+nheller=silcon.com at pm.org] On Behalf Of
Sergey Fetisov
Sent: Thursday, May 22, 2008 3:25 PM
To: San Francisco Perl Mongers User Group
Subject: Re: [sf-perl] Plucking from a string

 

Hi,

 

Just do it in a Perl-oriented style - use the regular expressions:

 

#!/usr/bin/perl
use warnings;
use strict;

my $theline = "vvvbcd=7wwwbcd=88xxxbcd=999yyybcd=1000zzz";
my $TARGETSTR = "bcd=";

while ($theline =~ /($TARGETSTR\d+)/gi) {  print "$1\n"; }

 

 

Regards,

 

Sergey

 

  _____  

From: sanfrancisco-pm-bounces+sergey.fetisov=ask.com at pm.org
[mailto:sanfrancisco-pm-bounces+sergey.fetisov=ask.com at pm.org] On Behalf Of
Neil Heller
Sent: Thursday, May 22, 2008 3:11 PM
To: 'San Francisco Perl Mongers User Group'
Subject: [sf-perl] Plucking from a string

I just wrote the code below and was wondering how I could make a inner loop
A LOT simpler.

I would appreciate any suggestions.

Basically the code works like this:

Given an arbitrary string, that string contains a single identifier (in this
case "bcd=") followed by a numeric value.

I would like to pull out the identifier and the value so the resulting
display is (for example):

bcd=7

bcd=88

bcd=999

bcd=1000

 

Neil Heller

 

 

#! usr/bin/perl

 

use warnings;

use strict;

 

my $counter = 0;

my $theline = "vvvbcd=7wwwbcd=88xxxbcd=999yyybcd=1000zzz";

my $TARGETSTR = "bcd=";

my $spot = 0;

my $done = 0;

my $fragment;

my ($inner_done, $inner_char, $inner_count);

my $NUMERIC = "0123456789";

 

while (!$done) {

    $spot = index $theline, $TARGETSTR;

    if ($spot == -1) {

        $done = 1;

    } else {

        $fragment = substr $theline, $spot;

        print $TARGETSTR;

        $inner_done = 0;

        $inner_count = 4;

        while (!$inner_done) {

            $inner_char = substr $fragment, $inner_count, 1;

            if ((index $NUMERIC, $inner_char) > -1) {

                print $inner_char;

                $inner_count++;

            } else {

                $inner_done = 1;

            }

        }

        print "\n";

        $fragment = substr $fragment, 5;

        $theline = $fragment;

    }

}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/sanfrancisco-pm/attachments/20080522/4a72ed45/attachment.html 


More information about the SanFrancisco-pm mailing list