# good idea :-)
use strict;
# There are many theories on why this is a bad idea.
# My personal favourite is keeping the scope of a variable
# as small as possible. Larger scope means that when I'm
# trying to read your code, I need to go back farther in
# the program to find out it's a lexical, and to find out
# who may have changed the value.
# Another reason I know to change this is to create and initialise
# the variable at the same time - it means having no undef
# variables (unless you explicitly want it to be undef).
# For example, there is no reason to have $database undefined.
# That would be an error. By combining the my with the
# initialisation, then there is no point in the program
# where you could be accessing an undefined $database.
#my ($object_name,
# $object_type,
# $module_type,
# @list_of_objects,
# $database,
# $userid,
# $passwd);
# create/initialise.
my $database = 'DBI:Oracle:tdtxtasd';
print "Please enter your username:";
my $userid = <STDIN>;
chomp($userid);
print "Please enter your password:";
# You can super-search on passwords - there are ways to
# do this without echoing to the screen. I think it's
# in code snippets - and I think I contributed to it ;-)
my $passwd = <STDIN>;
chomp($passwd);
# some people put all use's at the top. Some put them
# close to where they're used. I'm not convinced one is
# better than the other, so this is just FYI.
use DBI;
# here's a my which initialises. Good choice :-)
my $dbh = DBI->connect($database, $userid, $passwd)
or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare('SELECT object_name, object_type FROM user_obj
+ects WHERE object_type = ?')
or die "Couldn't prepare statement: " . $dbh->errstr;
my $module_type = "PROCEDURE";
my $rc = $sth->execute($module_type);
my @list_of_objects;
while (($object_name, $object_type) = $sth->fetchrow())
{
print "$object_name $object_type\n";
# push a scalar onto the list. That scalar is an array ref.
# in this case, a ref to an anonymous array.
push @list_of_objects, [ $object_name, $object_type ];
};
$dbh->disconnect;
To read it back out:
foreach my $object (@list_of_objects)
{
my @values = @{$object};
# do whatever.
}
Hope that helps! |