Thanks a lot folks.
My mistake...I should have looked at "-p"'s significance before posting it.
Thanks again,
Arijit
DZ-Jay <[EMAIL PROTECTED]> wrote:
DZ-Jay <[EMAIL PROTECTED]> wrote:
Arijit Das wrote:
> I am just wondering why is this giving a strange result. Any clues...?
>
This is from the Perl In A Nutshell book:
------
-p: Causes Perl to assume the following loop around your script, which
makes it iterate over filename arguments:
LINE:
while (<>) {
... # your script goes here
} continue {
print;
}
The lines are printed automatically. To suppress printing, use the -n
switch. If both are specified, the -p switch overrides -n. BEGIN and END
blocks may be used to capture control before or after the implicit loop.
------
So your one-liner is actually:
LINE:
while (<>) {
my $var1 =;
$var2 = $var1 * 100;
print $var2;
} continue {
print;
}
It's already looping through the arguments with while(<>), so readingwill yield nothing. Also, -p implies printing each argument
read, so that's the output that you are getting, not $var2 as you may think.
You have 2 choices, either remove -p to read STDIN as you are doing, or
change -p to -n to supress automatic printing of the input strings and
remove the assignment of STDIN and read $_, which would be the next
argument read from the command line:
echo 4.56 | perl -e 'my $var1=; $var2=$var1*100;print $var2;'
or
echo 4.56 | perl -n -e '$var2=$_*100;print $var2;'
If you keep -p, it'll print the input string right after printing $var2,
like this:
4564.56
Which you do not want.
dZ.
What are the most popular cars? Find out at Yahoo! Autos
_______________________________________________ Perl-Unix-Users mailing list Perl-Unix-Users@listserv.ActiveState.com To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs