split commands oddity

R

rxl124

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.
 
H

Himanshu Garg

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.
 
R

rxl124

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";
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,053
Latest member
BrodieSola

Latest Threads

Top