For Programmers: Free Programming Magazines  


Home > Archive > PERL Miscellaneous > August 2007 > help regex and substitutions









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author help regex and substitutions
john swilting

2007-08-31, 7:57 pm

I recopied the chaphitre 5
#!/usr/bin/perl -w

use strict;
use diagnostics;

my @conf = ('XferMethod',
'rsync',
'XferLogLevel',
'1',
'RSyncShare',
'___1___',##they is these 2 pattern
'ClientNameAlias',
'___2___');##they is pattern


print @conf,"\n";
my @substitution = @conf;
my $motif =qr/___[1-9][0-9]?___/is;
my @regexes = ();
my @motif = ();
foreach $motif ( @motif ) {
push @regexes, qr/$motif/;
}

foreach my $elem ( @substitution ) {
foreach my $re ( @regexes ) {##the loop however turns well#scalar(@regexes
if ( $elem =~ /$re/) {##one do not arrive to this line
print "$elem egal $re\nentrer la valeur\n";
chop ($elem =<STDIN> );
print "nouvelle valeur de",$elem,"\n";
}
}
}

Jim Gibson

2007-08-31, 7:57 pm

In article <46d83c60$0$27378$ba4acef3@news.orange.fr>, john swilting
<john.swilting@wanadoo.fr> wrote:

> I recopied the chaphitre 5


In what book?

> #!/usr/bin/perl -w


use warnings; # preferred these days

>
> use strict;
> use diagnostics;
>
> my @conf = ('XferMethod',
> 'rsync',
> 'XferLogLevel',
> '1',
> 'RSyncShare',
> '___1___',##they is these 2 pattern
> 'ClientNameAlias',
> '___2___');##they is pattern
>
>
> print @conf,"\n";
> my @substitution = @conf;
> my $motif =qr/___[1-9][0-9]?___/is;
> my @regexes = ();
> my @motif = ();


The array @motif is empty.

> foreach $motif ( @motif ) {
> push @regexes, qr/$motif/;
> }


You are iterating over the empty array @motif, assigning each value
therein to the variable $motif. At the end of this loop, since @motif
has no values, the array @regexes will also be empty.

Perhaps you want, instead of the loop, the following:

push( @regexes, $motif );

>
> foreach my $elem ( @substitution ) {
> foreach my $re ( @regexes ) {##the loop however turns well#scalar(@regexes
> if ( $elem =~ /$re/) {##one do not arrive to this line
> print "$elem egal $re\nentrer la valeur\n";
> chop ($elem =<STDIN> );
> print "nouvelle valeur de",$elem,"\n";
> }
> }
> }
>


The inner statements of the loop on @regexes will never be executed,
because @regexes has no values.

--
Jim Gibson

Posted Via Usenet.com Premium Usenet Newsgroup Services
----------------------------------------------------------
** SPEED ** RETENTION ** COMPLETION ** ANONYMITY **
----------------------------------------------------------
http://www.usenet.com
john swilting

2007-08-31, 7:57 pm

Jim Gibson wrote:

> In article <46d83c60$0$27378$ba4acef3@news.orange.fr>, john swilting
> <john.swilting@wanadoo.fr> wrote:
>
>
> In what book?
>
>
> use warnings; # preferred these days
>
>
> The array @motif is empty.
>
>
> You are iterating over the empty array @motif, assigning each value
> therein to the variable $motif. At the end of this loop, since @motif
> has no values, the array @regexes will also be empty.
>
> Perhaps you want, instead of the loop, the following:
>
> push( @regexes, $motif );
>
>
> The inner statements of the loop on @regexes will never be executed,
> because @regexes has no values.
>

the book is programmation en perl 3eme edition
with the push (@regexes,$motif)
the substitution is well

how to make to improve my code... I look at closely the precis examples
handbook O reilly
john swilting

2007-08-31, 7:57 pm

john swilting wrote:

> Jim Gibson wrote:
>
[color=darkred]
> the book is programmation en perl 3eme edition
> with the push (@regexes,$motif)
> the substitution is well
>
> how to make to improve my code... I look at closely the precis examples
> handbook O reilly

#!/usr/bin/perl -w

use strict;
use diagnostics;
use warnings;

my @conf = ('XferMethod',
'rsync',
'XferLogLevel',
'1',
'RSyncShare',
'___1___',
'ClientNameAlias',
'___2___');


print @conf,"\n";
my @substitution = @conf;
my $motif =qr/(___[1-9][0-9]?___)/is;
my @regexes = ();
##my @motif = ();
##foreach $motif ( @motif ) {
## push (@regexes,qr/$motif/);
## }
push (@regexes,$motif);
foreach my $elem ( @substitution ) {
foreach my $re ( @regexes ) {
if ( $elem =~ /$re/) {
print "$elem egal $re\nentrer la valeur\n";
chop ($elem =<STDIN> );
print "nouvelle valeur de",$elem,"\n";
}
}
}


how to do improves my code
Klaus

2007-08-31, 7:57 pm

On Aug 31, 7:15 pm, john swilting <john.swilt...@wanadoo.fr> wrote:
> how to make to improve my code...
>
> #!/usr/bin/perl -w
>
> use strict;
> use diagnostics;


If you can afford, get rid of the "use diagnostics" to improve
execution speed.

> use warnings;
>
> my @conf = ('XferMethod',
> 'rsync',
> 'XferLogLevel',
> '1',
> 'RSyncShare',
> '___1___',
> 'ClientNameAlias',
> '___2___');
>
> print @conf,"\n";
> my @substitution = @conf;
> my $motif =qr/(___[1-9][0-9]?___)/is;
> my @regexes = ();


> ##my @motif = ();
> ##foreach $motif ( @motif ) {
> ## push (@regexes,qr/$motif/);
> ## }


You could remove the commented out code altogether from your program,
it is confusing.

> push (@regexes,$motif);
> foreach my $elem ( @substitution ) {
> foreach my $re ( @regexes ) {
> if ( $elem =~ /$re/) {
> print "$elem egal $re\nentrer la valeur\n";
> chop ($elem =<STDIN> );


You could use chomp instead of chomp.
perldoc -f chomp
This safer version of chop removes any trailing string that
corresponds to the current value of $/

> print "nouvelle valeur de",$elem,"\n";
> }
> }
> }


Tad McClellan

2007-08-31, 7:57 pm

john swilting <john.swilting@wanadoo.fr> wrote:


> my $motif =qr/___[1-9][0-9]?___/is;



That is equivalent to:

my $motif =qr/___[1-9][0-9]?___/;

Both of the modifiers are no-ops. They do nothing.

m//i ignores case. Where can your pattern match letters so that
their case can be ignored? Nowhere.

m//s makes dot in your pattern match a newline. Where is the dot in
your pattern that is being modified?

You should not use a modifier unless you know what that modifier does,
and why it is needed in your regex.


--
Tad McClellan
email: perl -le "print scalar reverse qq/moc.noitatibaher\100cmdat/"
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com