Yes, I made some simple mistakes, the reason was that I was confused on complex data structures. Now, I changed:
print "Enter the student's course(s) ";
$self->{"Course(s)"}=[<STDIN>]
to
print "Enter the student's course(s) delimiting
them with a comma (,) ";
chomp(my $cour = <STDIN>);
$cour =~ s/\s+//g;
my @cour = split(",", $cour);
chomp($self->{"Course(s)"}->{"cour"}=[@cour]);
-----------------------------------
I renewed the push() method:
sub add_courses {
my $self = shift;
my $courses = shift;
# $courses = ["C++", "Java"];
my $num = @{$courses};
for ($i=0; $i<$num; $i++) {
push @{$self->{'Course(s)'}->{'cour'}}, $courses->[$i];
}
But, I'm having trouble with a deleting the element of an array, ofcourse :), here I'm attaching the output (error in the last line, if you see there are two commas), it seems that element is not being deleted, instead it's undefined. How to delete the element? I tried look into perldoc but I couldn't find another functions except 'delete' and 'undef'. Here in perldoc about 'delete' : WARNING: Calling delete on array values is deprecated and likely to be removed in a future version of Perl.
Output of program:
Here are the statistics for the Sino.
Address: kk
ID: kk
Major: jj
Start_Date: kk
Tuition: kk
Course(s): Chem, Bio, Maths, C++, Java
After dropping: Chem, Bio, Maths, , Java
Code of program and module:
package Student3;
sub new { my $class = shift;
my $ref = {}; # Anonymous hash
bless($ref, $class);
return $ref;
}
sub set_student { my $self = shift;
print "Enter the student's name ";
chomp($self->{"Name"}=<STDIN>);
print "Enter the student's major ";
chomp($self->{"Major"}=<STDIN>);
print "Enter the student's course(s)
delimiting them with a comma (,) ";
chomp(my $cour = <STDIN>);
$cour =~ s/\s+//g;
my @cour = split(",", $cour);
chomp($self->{"Course(s)"}->{"cour"}=[@cour]);
<...continues here...>
}
sub show_student { my $self = shift;
print "Here are the statistics for the ",
$self->{"Name"}, ".\n";
foreach $key (sort(keys %$self)) {
if ($self->{$key} ne $self->{"Course(s)"}) {
printf "%s: %s\n", $key, $self->{$key} unless
$self->{$key} eq $self->{"Name"};
}
}
print "Course(s): ",
join (", ", @{$self->{'Course(s)'}->{'cour'}}), "\n";
}
sub add_courses {
my $self = shift;
my $courses = shift;
my $num = @{$courses};
for ($i=0; $i<$num; $i++) {
push @{$self->{'Course(s)'}->{'cour'}}, $courses->[$i];
}
}
sub drop_courses {
my $self=shift;
my $del_cour = shift; # $del_cour = ["Java"];
my $num = @{$del_cour};
if ($num == 1) {
foreach $k (@{$self->{'Course(s)'}->{'cour'}}) {
if ($k eq $del_cour->[0]) {
$k="";
}
}
}
print "After dropping: ",
join (", ", @{$self->{'Course(s)'}->{'cour'}}), "\n";
}
1;
The code of a program
#!/usr/bin/perl -w
use Student3;
use warnings;
use strict;
my $student1 = Student3->new;
$student1->set_student;
$student1->show_student;
$student1->add_courses(["C++", "Java"]);
$student1->show_student;
$student1->drop_courses(["C++"]);
|