please help me with this perl code getting error "use of uninitialized value"
ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
please help me with this perl code getting error "use of uninitialized value"
hi
i am getting error as:
Use of uninitialized value in concatenation (.) or string at ./iothread.pl line 86, <GEN1> line 1.
during runtime
and
the output looks like this:
Quote:
Multiplex server running on port 4444...
Created thread 1 for new client 10.168.1.2:3233
Use of uninitialized value $_ in scalar chomp at ./iothread.pl line 66, <GEN1> line 1.
1005874632400418
1234
login
Use of uninitialized value in concatenation (.) or string at ./iothread.pl line 86, <GEN1> line 1.
10895
Thread 1 terminated abnormally: Not a CODE reference at ./iothread.pl line 87, <GEN1> line 1.
Code:
#!/usr/bin/perl
# iothreadserv.pl
use warnings;
use strict;
use integer;
BEGIN
{
use Config;
die "No thread support!\n" unless $Config{'usethreads'};
}
use Thread;
use IO::Socket;
use DBI;
use DBD::mysql;
# Autoflushing on
$| = 1;
my $port = 4444;
my $server = IO::Socket->new(
Domain => PF_INET,
Proto => 'tcp',
LocalPort => $port,
Listen => SOMAXCONN,
Reuse => 1,
);
die "Bind failed: $!\n" unless $server;
print "Multiplex server running on port $port...\n";
while (my $connection = $server->accept)
{
my $name = $connection->peerhost;
my $port = $connection->peerport;
my $thread = new Thread(\&connection, $connection, $name, $port);
print "Created thread ",$thread->tid," for new client $name:$port\n";
$thread->detach;
}
exit;
# child thread - handle connection
sub connection
{
my ($connection, $name, $port) = @_;
$connection->autoflush(1);
#############################my sql connect###############################
my $platform = "mysql";
my $database = "project";
#my $host = "localhost";
#my $port = "3306";
my $user = "root";
my $pw = "";
# DATA SOURCE NAME
my $dsn = "dbi:mysql:$database";
# PERL DBI CONNECT
my $dbh = DBI->connect($dsn, $user, $pw) or die "cannot connect to database";
#######################################################################33
print $connection "You're connected to the server!\n";
my $client = <$connection>;
chomp; # ($client);
#while (<$connection>) {
if ($client =~ /::login/)
{
print $connection "Login Initiated\n";
my $rand = int(rand(100000));
print $connection "Your rand number : $rand";
#$client =~ s/([\$\@\\])/\\$1/mg; ##escape all $, @ and \
#$client = quotemeta $client;
my @recv_string = split /::/ , $client;
foreach (@recv_string)
{
print "$_ \n";
}
#next line injection possible !! REMOVE IT!!
my $sth = $dbh->prepare("select * from Temp_ID where TEMP_NO = $recv_string[0]");
$sth->execute();
#take only one output row
my $ref = $sth->fetchrow_hashref();
# $sth->finish();
print "$ref->{'Temp_ID'} $ref->{'CARD_ID'}\n";
$sth = $dbh->("select PIN from Cards where Card_ID = $ref->{CARD_ID}");
$sth->execute();
# $sth->finish();
my $ref2 = $sth->fetchrow_hashref();
if ($recv_string[1] eq $ref2->{PIN})
{
print $connection "PIN verified OK";
}
}
if ($client =~ /:logout/)
{
print $connection "You are being Logged OUT\n";
}
print "Client $name:$port says: $client \n";
print $connection "Message received OK\n";
# }
$dbh->disconnect;
$connection->shutdown(SHUT_RDWR);
}
I would even ask a more particylar question: "What's the argument of 'chomp' ?".
In his code, it doesn't have one. But Perl doesn't require that it have one. That's why I'm asking him what he thinks the statement is supposed to do for him.
In his code, it doesn't have one. But Perl doesn't require that it have one. That's why I'm asking him what he thinks the statement is supposed to do for him.
Well, if a function doesn't have an argument (but it's not the case), then what does it do ?
Burns CPU time ? Changes a global variable randomly ?
This would be an interesting discussion to have at some point, but right now I'm mainly interested in what haxpak's intention was on line 66. haxpak? You still there?
This would be an interesting discussion to have at some point, but right now I'm mainly interested in what haxpak's intention was on line 66. haxpak? You still there?
I don't think there is a place for discussion, but I do think it's worth reading the manual. What about
perldoc -f chomp
?
My question about 'chomp' argument was a very practical one.
I agree with this line of reasoning: "what is your intention," and, "do you know what your intention is?"
This isn't a "slam" ... isn't public humiliation ... it's necessary in really understanding and solving any problem.
Perl has many "implied arguments," in this case as in many other cases (see perldoc perlvar), which can make it cryptic. But if you can first latch upon the designer's intent, whether "the designer" is you or someone else, the nature of any logic error usually reveals itself quickly.
I would urge you to respond: this is the help you are asking for. Participate. (Others are watching intently.)
Last edited by sundialsvcs; 03-01-2009 at 10:56 PM.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.