in reply to Problem with reading multi-line

Although you've asked the user how many numbers to enter up front, and stored it in $times, you then make no use it at all.

So when you do @ascii=<STDIN>;, perl doesn't know how many numbers to ask for, so It'll just keep asking for more until the user does something to stop it. For example, typing ^Z (or ^D on *nix?). But if the user enters more or less numbers before doing that, your program will get more or less than it is expecting.

You need to modify your code so that it uses the value of $times to control how many times you ask the user for another number. Eg.

#!/usr/bin/perl use strict; use warnings; print "Enter the number of times : "; my $times=<STDIN>; my @ascii; foreach (1 .. $times ) { push @ascii, scalar <STDIN>; } foreach my $s ( @ascii ) { print chr($s); }

You'll get on much better if you format your code properly. And using strict and warnings will save you many hours of reshaping your plaster with your forehead.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^2: Problem with reading multi-line
by jwkrahn (Abbot) on May 02, 2010 at 00:27 UTC

    The OP said:

    concatenates the corresponding characters to form a string

    So this may be better:

    my $ascii; foreach ( 1 .. $times ) { $ascii .= chr <STDIN>; } print $ascii;
Re^2: Problem with reading multi-line
by sarshads (Novice) on May 02, 2010 at 14:41 UTC
    Thanks to everyone here for replying.

    My solution was reading number of times in a variable called $times and then loop to read or print.

    If you read exam test solution as mentioned above, it read the input different way. For example @ascii is an array :

    $ascii[0]=3; (which mean read input 3 times) $ascii[1]=65; (read first input) $ascii[2]=66; (read second input) $ascii[3]=66; (read third input)

    Here automatically ends without pressing Ctrl+Z/D because as said first value ascii as number of times to read input.

    This is what I understand from the problem, please tell me if you have another solutions that can execute this task.

    Thanks to all. Iam a new comer to perl monks.