dippa wrote:
basic perl problem which is annoying me, the code is:
---
#!/usr/bin/perl -w
use strict;
my $string;
my $subString;
my @indexes;
print "Enter a string:\n";
chomp($string = <STDIN>);
print "\nEnter substring to search for:\n";
chomp($subString = <STDIN>);
## This while loop does what i'm after
#my $pos = -1;
#while(1) {
# $pos = index($string, $subString, $pos + 1); # find next
position
# print "\nPOS: $pos\n";
# last if $pos == -1; # index returns -1 if substring has no
match
# push @indexes, $pos;
#}
# Wanted to convert it to a for loop for learning
# does not work like while loop
for(my $pos = 0; $pos == -1; $pos++) {
print "\nPOS: $pos\n";
$pos = index($string, $subString, $pos);
print "\nPOS: $pos\n";
push @indexes, $pos;
}
if(@indexes) {
print "\nLocations of '$subString' in '$string' were: @indexes\n";
} else {
print "\nNo match\n";
}
---
======
Working while loop:
---
my $pos = -1;
while(1) {
$pos = index($string, $subString, $pos + 1); # find next position
print "\nPOS: $pos\n";
last if $pos == -1; # index returns -1 if substring has no
match
push @indexes, $pos;
}
Using a C-style for loop that would be:
for ( my $pos = -1; 1; ) {
$pos = index($string, $subString, $pos + 1); # find next position
print "\nPOS: $pos\n";
last if $pos == -1; # index returns -1 if substring has no match
push @indexes, $pos;
}
---
Output example:
---
[EMAIL PROTECTED]:~/storage/study/perl/LearningPerlv4/chapter13/q3$ ./
substring.pl
Enter a string:
stst
Enter substring to search for:
st
POS: 0
POS: 2
POS: -1
Locations of 'st' in 'stst' were: 0 2
---
======
Change to a for loop, only goes through once, unsure why?
---
for(my $pos = -1; $pos == -1; $pos++) {
print "\nPOS: $pos\n";
$pos = index($string, $subString, $pos);
print "\nPOS: $pos\n";
push @indexes, $pos;
}
As a while loop that would be:
my $pos = -1;
while ( $pos == -1 ) {
print "\nPOS: $pos\n";
$pos = index($string, $subString, $pos);
print "\nPOS: $pos\n";
push @indexes, $pos;
$pos++;
}
---
Output example:
---
Enter a string:
stst
Enter substring to search for:
st
POS: -1
POS: 0
Locations of 'st' in 'stst' were: 0
---
======
Change to a for loop, does not enter the loop at all, unsure why?
---
for(my $pos = 0; $pos == -1; $pos++) {
print "\nPOS: $pos\n";
$pos = index($string, $subString, $pos);
print "\nPOS: $pos\n";
push @indexes, $pos;
}
As a while loop that would be:
my $pos = 0;
while ( $pos == -1 ) {
print "\nPOS: $pos\n";
$pos = index($string, $subString, $pos);
print "\nPOS: $pos\n";
push @indexes, $pos;
$pos++;
}
---
Output example:
---
Enter a string:
stst
Enter substring to search for:
st
No match
---
======
Trying to work out why:
1. the for loop does not work, want the same logic as the while loop
2. for(my $pos = -1; $pos == -1; $pos++) only iterates through once
3. for(my $pos = 0; $pos == -1; $pos++) does not enter loop at all
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/