Ahh yes. Ok. I thought this but I didn't think you could do that without explicitly expressing that the array was being compared as a scalar. I researched it a lil bit more and found out that what I have is failing not because of the if statement but because he is creating the array @lines from his data which will definitely be greater than 1 and this is why it seems to be failing for me. Again, I must be missing something else here. Maybe I just didn't duplicate the situation correctly on my side. If I debug it here is what I get:
[jconner@kwan ~]$ cat celldata | perl -d code.pl
Default die handler restored.
Loading DB routines from perl5db.pl version 1.07
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(code.pl:4): chomp(my $msisdn = <STDIN>);
DB<1> t
Trace = on
DB<1> s
main::(code.pl:5): $/ = ""; # read paragraphs
DB<1>
main::(code.pl:6): my $para;
DB<1>
main::(code.pl:7): my $lastHeading;
DB<1>
main::(code.pl:9): while ($para = <>) {
DB<1>
main::(code.pl:11): my @lines = split(/\n/, $para);
So, here we see that we sucked in the file which is the data he presented in the post.
DB<1> print $para
main::((eval 26)[/usr/local/lib/perl5/5.6.0/perl5db.pl:1510]:2):
2: print $para;
Call Identification Number: 10275050
Related Call Number: 10275036
Record Sequence Number: 2205392
Exchange Identity: MAPP01E 0117802
MSC Identification: TON: 1 NPI: 1 MSISDN: "PHONE NUMBER"
Cell ID for First Cell: MCC: 310 MNC: 64 LAC: x'44D CI: x'503E
Incoming Route: AORX02I
Outgoing Route: BAPL01O
Calling Party Number: TON: 4 NPI: 1 MSISDN: "PHONE NUMBER"
Called Party Number: TON: 1 NPI: 1 MSISDN: "PHONE NUMBER I LOOK FOR IN
+ AN MSTERMINATING RECORD BLOCK"
IMSI: 310640010070933
IMEI: NULL
Mobile Station Roaming Number: TON: 1 NPI: 1 MSISDN: 19207079858
Redirecting Number: NULL
Redirection Counter: 0
Original Called Number: NULL
Date for Start of Charge: 01/07/18
Time for Start of Charge: 00:14:38
Chargeable Duration: 00:00:00
Traffic Activity Code: *020
TeleService Code: x'11
Bearer Service Code: NULL
Internal Cause and Loc: LOCATION: 11 CAUSE: 46
Time from Register Seizure to Start of Charging: 00:00:15
Time for Stop of Charging: 00:14:38
Interruption Time: 00:00:00
Type of Calling Subscriber: 0
Disconnecting Party: 0
Charged Party: 1
Fault Code: NULL
eosInfo: x'0
Call Position: 2
Miscellaneous Information: NULL
Restart During Call: NULL
Restart Between Disc and Output: NULL
Origin for Charging: x'1
Cell ID for Last Cell: MCC: 310 MNC: 64 LAC: x'44D CI: x'503E
Location Number: TON: 1 NPI: 1 MSISDN: 14147089800
Output for Subscriber: NULL
Last Partial Output: NULL
Partial Output Rec Num: NULL
Regional Service Used: NULL
Region Dependent Charging Origin: NULL
Transparency Indicator: NULL
dTMFUsed: NULL
Tariff Class: x'A
Tariff Switch Indicator: 0
SS Code: NULL
ICI Ordered: NULL
Ok, so now the next thing that will happen is that he splits this information up into an array called @lines.
DB<2>
main::(code.pl:13): if (@lines == 1) { # A heading
DB<2> print scalar @lines
main::((eval 27)[/usr/local/lib/perl5/5.6.0/perl5db.pl:1510]:2):
2: print scalar @lines;
49
Which now has 48 elements (49-1) I believe...still that is greater than 1.
DB<3>
main::(code.pl:18): if ($lastHeading eq "MSTerminating") {
DB<3>
Use of uninitialized value in string eq at code.pl line 18, <> chunk 1
+.
Use of uninitialized value in string eq at code.pl line 18, <> chunk 1
+.
Use of uninitialized value in string eq at code.pl line 18, <> chunk 1
+.
Use of uninitialized value in string eq at code.pl line 18, <> chunk 1
+.
main::(code.pl:9): while ($para = <>) {
DB<3>
Which of course fails everytime. Where did I duplicate the situation incorrecty?
Debugged program terminated. Use q to quit or R to restart,
use O inhibit_exit to avoid stopping after program termination,
h q, h R or h O to get additional info.
DB<3>
I used the following code (derived from his with my minor tweaks, ie strict and warnings enabled and indentation added:
#!/usr/bin/perl -w
use strict;
chomp(my $msisdn = <STDIN>);
$/ = ""; # read paragraphs
my $para;
my $lastHeading;
my @lines;
while ($para = <>) {
@lines = split(/\n/, $para);
if (@lines == 1) { # A heading
$lastHeading = $lines[0];
next;
}
if ($lastHeading eq "MSTerminating") {
if ($lines[8] =~ m/$msisdn/) {
print "MSTerminating\n";
print "\n";
print "$lines[9]\n";
print "$lines[4]\n";
}
} elsif ($lastHeading eq "MSORIGINATING") {
if ($lines[7] =~ m/$msisdn/) {
print "MSORIGINATING\n";
print "\n";
print "$lines[7]\n"; # sixth line
}
} elsif ($lastHeading eq "TRANSIT") {
if ($lines[7] =~ m/$msisdn/) {
print "$lines[7]\n";
}
} elsif ($lastHeading eq "mSOriginatingSMSinSMSIWMSC") {
if ($lines[4] =~ m/$msisdn/) {
print "$lines[4]\n";
}
}
}
Thanks guys.
----------
- Jim |