469,926 Members | 1,514 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,926 developers. It's quick & easy.

split commands oddity

Hi, room
Beginner of learning perl here!!

I have question to all,

I have below file name datebook.master which contains only 2 lines
Mike wolf:12/3/44:144 park ave, paramus: 44000
Sarah kim: 3/2/67:255 lomel ave, fort lee: 33000

Now, I am testing out below scripts and working fine.
-------------------- scripts 1------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
while(<FILE>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

And, I get desired results.
However, if I do a script w/ below, it does not work.

-------------------- scripts 2------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
@lines=(<FILE>);
while(<@lines>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

Can someone tell me why this is happening?
I want script 2 since I need to call this array again in the later parts of
the scripts(in the longer version).

Can someone kindly respond?

Big thanks in advance.
Jul 19 '05 #1
3 4182
rx****@hehe.com wrote:
However, if I do a script w/ below, it does not work.
<snip>
while(<@lines>) {
Replace that with

for (@lines) {
Can someone tell me why this is happening?


http://www.perldoc.com/perl5.8.0/pod/perlsyn.html

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

Jul 19 '05 #2
rx****@hehe.com wrote in message news:<8a**************************@posting.google. com>...
Hi, room
Beginner of learning perl here!!

I have question to all,

I have below file name datebook.master which contains only 2 lines
Mike wolf:12/3/44:144 park ave, paramus: 44000
Sarah kim: 3/2/67:255 lomel ave, fort lee: 33000

Now, I am testing out below scripts and working fine.
-------------------- scripts 1------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
while(<FILE>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

And, I get desired results.
However, if I do a script w/ below, it does not work.

-------------------- scripts 2------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
@lines=(<FILE>);
while(<@lines>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

Can someone tell me why this is happening?
I want script 2 since I need to call this array again in the later parts of
the scripts(in the longer version).

Can someone kindly respond?

Big thanks in advance.


Change while(<@lines>) to foreach (@lines)

++imanshu.
Jul 19 '05 #3
hi******@gdit.iiit.net (Himanshu Garg) wrote in message news:<a4**************************@posting.google. com>...
rx****@hehe.com wrote in message news:<8a**************************@posting.google. com>...
Hi, room
Beginner of learning perl here!!

I have question to all,

I have below file name datebook.master which contains only 2 lines
Mike wolf:12/3/44:144 park ave, paramus: 44000
Sarah kim: 3/2/67:255 lomel ave, fort lee: 33000

Now, I am testing out below scripts and working fine.
-------------------- scripts 1------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
while(<FILE>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

And, I get desired results.
However, if I do a script w/ below, it does not work.

-------------------- scripts 2------------------------------------------
#!/usr/bin/perl -w
open(FILE, "datebook.bak") || die "CAn't open $!\n";
@lines=(<FILE>);
while(<@lines>) {
@line=split(":");
print "$line[0] $line[2]\n";
}
close(FILE)
------------------------------------------------------------------------

Can someone tell me why this is happening?
I want script 2 since I need to call this array again in the later parts of
the scripts(in the longer version).

Can someone kindly respond?

Big thanks in advance.


Change while(<@lines>) to foreach (@lines)

++imanshu.

thank you all, I have used for and it's working like charms..
I was doing excersise on the book that I recently purchased so that I
can practice on perl by myself and it was getting tough to do this
particular one cause I couldn't understand what was going on. Below is
entire script(please do advise as I am real beginner and if I made
really short script long one.)

also, this --> @all_lines = map { split(":") } @lines; , not
understanding
why split command would not work w/out map.......

At all rate, thank you very much.
----------------------------------------------------------------
#!/usr/bin/perl

open (FILEINFO, "file.txt") || die "Can't open file $!\n";
@lines=<FILEINFO>;
close FILEINFO;
@all_lines = map { split(":") } @lines;

print "Who would you like to find? \n";
chomp($looking_for=<STDIN>) ;
print "You are looking for $looking_for \n";
$count_look = grep(/$looking_for/i, @all_lines);
@count_look = grep(/$looking_for/i, @all_lines);

print " Number of person that matched was $count_look \n";
print " They are @count_look \n";
for (@lines) {
( $name, $phone, $address, $bd, $sal )=split(":");
print "$name\t $phone\n";
}

sleep(1);
print "Who are you searching for ?";
chomp($looking_for1=<STDIN>) ;
@looking_for2=grep(/$looking_for1/i, @lines);
$looking_for2=grep(/$looking_for1/i, @lines);
( $name_l, $phone_l, $address_l, $bd_l, $sal_l )=map {split(":") }
@looking_for2;
print "@looking_for2\n";
sleep(1);
print "What is the new phone number for $looking_for1 ?";
chomp($new_numb=<STDIN>);
print "$looking_for1\'s phone number is currently $phone_l\n";
@newinfo = split(":", @looking_for2);
@newinfo1 = splice(@newinfo, 1,1, "$new_numb");

print "Here is the line showing the new phone number:\n";
print join(":", $name_l, $new_numb, $address_l, $bd_l, $sal_l), "\n";
print "$looking_for1 was found in the array $looking_for2 times. \n";
Jul 19 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

12 posts views Thread by Michael Foord | last post: by
4 posts views Thread by qwweeeit | last post: by
9 posts views Thread by Will McGugan | last post: by
2 posts views Thread by Jay | last post: by
5 posts views Thread by jmdocherty | last post: by
43 posts views Thread by michael.f.ellis | last post: by
6 posts views Thread by Rex the Strange | last post: by
6 posts views Thread by Joel Koltner | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.