PERL Question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL Question
# 1  
Old 06-29-2004
Question PERL Question

I am new to perl. I have adopted some perl scripts that seem not to work 100%. I 've corrected such things as file sharing contention etc.

What these perl scripts basically do is extract specific records for statistical reporting of authentication and authorization from syslog daemon local logs.

now they create their own working files to perfom reporing from.

Now, these extraction scripts when they create these working files do not insert the complete line in the file. it appears to be cut off at around 180 characters.

Is this an inherent feature of perl ?

What can I do to correct this ?

thanks.
# 2  
Old 06-29-2004
Re: PERL Question

Quote:
Originally posted by Gary Dunn

Now, these extraction scripts when they create these working files do not insert the complete line in the file. it appears to be cut off at around 180 characters.

Is this an inherent feature of perl ?
Definitely not. Perl itself poses no restriction to length of a line, I'm not sure if OS poses a restriction though. With a simple test I did on my Linux system I have been able to extract lines of 2000 characters without problems.

It is difficult to suggest a fix without seeing at least part of the actual code ....
# 3  
Old 06-30-2004
Thanks!

Again - it could be the parsing logic. I still am trying to figure out /understand Perl itself. Here is some code. Maybe I will break it up and give you a little at a time.

my $date = $ARGV[0];
shift @ARGV;
my $errfile = "/radius/stats/errors.$date";
my $logfile = "/radius/log/local4.$date";
my $msgfile = "/radius/stats/log_msg.$date";
my $statsfile = "/radius/stats/stats.$date";
my $regfile = "/radius/stats/regid.$date";
my $ldapfile = "/radius/stats/ldap.$date";
my ( $host, $ip, $key, $nas, $reject, $server, $service, $user );
my ( %err, %nas, %regid, %stats );

$regid{'legacy'}{'accepts'}{'west'} = 0;
$regid{'legacy'}{'accepts'}{'central'} = 0;
$regid{'legacy'}{'accepts'}{'north'} = 0;
$regid{'legacy'}{'accepts'}{'northeast'} = 0;
$regid{'legacy'}{'rejects'}{'west'} = 0;
$regid{'legacy'}{'rejects'}{'central'} = 0;
$regid{'legacy'}{'rejects'}{'north'} = 0;
$regid{'legacy'}{'rejects'}{'northeast'} = 0;

#open LOG, "<$logfile" or die "$! : Unable to open $logfile for reading...\n";
open MSG, ">$msgfile" or die "Unable to open $msgfile for writing...\n";
while (defined($_ = <>)) {
if (/^\S+\s+\S+\s+\S+ (\S+?)\.\S+ .+ Protocol: Request from (\S+?) .+$/) {

$host = $1;
$nas = $2;
if ($nas =~ /^bras|^rback|^sms/) {
$service = 'adsl';
}
else {
$service = 'dial';
}

$nas{$service}{$nas}++;

if (/User (\S+) accepted $/) {
$stats{$host}{$service}{'attempts'}++;
$stats{$host}{$service}{'accepts'}++;

$user = $1;

if ($user =~ /^sbcyahooreg\@sbcglobal\.net$/i) {
if ($host =~ /anhmca|irvnca|lsanca|pltnca|snfcca|sntcca/) {
$regid{'sbcy'}{'accepts'}{'west'}++;
}
elsif ($host =~ /hstntx|kscymo|rcsntx/) {
$regid{'sbcy'}{'accepts'}{'central'}++;
}
elsif ($host =~ /chcgil|ipltin|klmzmi|milwwi|sfldmi|wotnoh/) {
$regid{'sbcy'}{'accepts'}{'north'}++;
}
elsif ($host =~ /mrdnct/) {
$regid{'sbcy'}{'accepts'}{'northeast'}++;
}
else {
$regid{'sbcy'}{'accepts'}{'unknown'}++;
}
} elsif ($user =~ /^dslreguser\@\S+$|^dslreguser$/i) {
if ($host =~ /anhmca|irvnca|lsanca|pltnca|snfcca|sntcca/) {
$regid{'legacy'}{'accepts'}{'west'}++;
}
elsif ($host =~ /hstntx|kscymo|rcsntx/) {
$regid{'legacy'}{'accepts'}{'central'}++;
}
elsif ($host =~ /chcgil|ipltin|klmzmi|milwwi|sfldmi|wotnoh/) {
$regid{'legacy'}{'accepts'}{'north'}++;
}
elsif ($host =~ /mrdnct/) {
$regid{'legacy'}{'accepts'}{'northeast'}++;
}
else {
$regid{'legacy'}{'accepts'}{'unknown'}++;
}
}
}


Do you see anything that may cause my problem ?
# 4  
Old 06-30-2004
Where are your print statements that are writing to the files? That would help.
# 5  
Old 06-30-2004
elsif (/User (.*) rejected \((\S+)\)/) {

if (!$user) {
$user = 'NULL';
}
$user = $1;
$reject = $2;
$stats{$host}{$service}{'attempts'}++;
$stats{$host}{$service}{$reject}++;

if ($reject eq 'ReasonNotGiven') {
$stats{$host}{$service}{'ReasonNotGiven'}++;
}

if ($user =~ /^hooreg\@\.net$/i) {
if ($host =~ /anhmca|irvnca|lsanca|pltnca|snfcca|sntcca/) {
$regid{'sbcy'}{'rejects'}{'west'}++;
}
elsif ($host =~ /hstntx|kscymo|rcsntx/) {
$regid{'sbcy'}{'rejects'}{'central'}++;
}
elsif ($host =~ /chcgil|ipltin|klmzmi|milwwi|sfldmi|wotnoh/) {
$regid{'sbcy'}{'rejects'}{'north'}++;
}
elsif ($host =~ /mrdnct/) {
$regid{'sbcy'}{'rejects'}{'northeast'}++;
}
else {
$regid{'sbcy'}{'rejects'}{'unknown'}++;
}
}
elsif ($user =~ /^dslreguser\@\S+$|^dslreguser$/i) {
if ($host =~ /anhmca|irvnca|lsanca|pltnca|snfcca|sntcca/) {
$regid{'legacy'}{'rejects'}{'west'}++;
}
elsif ($host =~ /hstntx|kscymo|rcsntx/) {
$regid{'legacy'}{'rejects'}{'central'}++;
}
elsif ($host =~ /chcgil|ipltin|klmzmi|milwwi|sfldmi|wotnoh/) {
$regid{'legacy'}{'rejects'}{'north'}++;
}
elsif ($host =~ /mrdnct/) {
$regid{'legacy'}{'rejects'}{'northeast'}++;
}
else {
$regid{'legacy'}{'rejects'}{'unknown'}++;
}
}
}
elsif (/Named Authentication Service|Could not identify Authorization Service/) {
next;
}
else {
print MSG "Protocol -> $_\n";
}
}
# 6  
Old 06-30-2004
Just from what you posted, is the final

print MSG "Protocol -> ..."

the only place which gives the output in your script, as I don't know if this is the whole script?

It is not obvious what the problem is. I guess it has more to do with incomplete extraction with regular expressions (which is also related to your data set). Also, your program has uses of $_ which I usually discourage because it makes the string you are operating on difficult to identify. The not explicit use of a variable makes searching, replacement and so on fallback to $_ so after a few such operations it becomes difficult to deduce what is inside. This does not seem to be related to your problem though, but without indentation, your code posted is really tiresome to read.

Maybe if you revise the code, consider breaking it up into a number of smaller functions each of which doing a small number of things to avoid lengthy deeply nested blocks that are difficult to trace.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl question about

Hello everybody, I am new at the forum and a total newbie when it comes to Unix. I am trying to see how I can add the ability to kill a user's processes? I want to add this to my Shel Script Add the code/process into a subroutine. Also, I would like to use an array to store the list... (0 Replies)
Discussion started by: kinelisch
0 Replies

2. Shell Programming and Scripting

PERL Question ...

I am reading a file in perl script .. during the debug the $linein value is : linein : +ASM1,sys,||¬ |3Æqúoü;”ט|| from this line I am getting the tmepuser and password from above : ($tmpuser, $pwd) = ($linein =~ /^$server\s*,\s*(+)\s*,\|\|(.+)\|\|/sm); I am getting $tmpuser and... (2 Replies)
Discussion started by: talashil
2 Replies

3. Shell Programming and Scripting

another perl question

I have a question regarding bulding a hash from a file which has below pattern I thought I could write something like this but clearly my syntax is way off $/ = "\n\n"; $" = "\n"; open(FILE, file1) || die; my %keymaster = ( ); while (<FILE>) { my $topinfo =~... (5 Replies)
Discussion started by: hankooknara
5 Replies

4. Shell Programming and Scripting

another perl question

I fail to see how below answer is 1? can someone explain this for me? DB<3> $string = "The cat sat on the mat"; DB<4> $animal = ($string =~ m/The (.*) sat/); DB<5> print $animal; 1 (2 Replies)
Discussion started by: hankooknara
2 Replies

5. Shell Programming and Scripting

Perl question regarding [ ]

Below program, I do not get why item I am looking for is , instead of . When I do $#text, i get the right value for $value1, but when I do , i get somsething4, instead of somsethingxxxxxxxxxxxxxxxxxxx(which is what I am looking for. when I do , I get empty.. why? what did I do wrong? can you... (2 Replies)
Discussion started by: hankooknara
2 Replies

6. Shell Programming and Scripting

another perl question

I copy and paste from the book but this thing is not working. I cannot figure out what is wrong with myline 9.. can someone please tell me # cat ./sort4.pl #!/usr/bin/perl -w use strict; use warnings; my $input = shift; my $output = shift; open(IN, '<', $input) or die... (4 Replies)
Discussion started by: hankooknara
4 Replies

7. Shell Programming and Scripting

PERL question

Hello, pkzipc of a certain zip file yeilds the following in shell PKZIP(R) Version 6.0 FAST! Compression Utility for AIX Copyright 1989-2002 PKWARE Inc. All Rights Reserved. Registered Version PKZIP Reg. U.S. Pat. and Tm. Off. Patent No. 5,051,745 Viewing .ZIP: test.zip Length... (13 Replies)
Discussion started by: jerardfjay
13 Replies

8. Shell Programming and Scripting

perl question

If I use 2 system commands in a script, will one finish before the next one starts? or will it start the first and the second at the same time? i.e. system("ps | grep rminer"); system("ls -al | grep 431"); (1 Reply)
Discussion started by: BG_JrAdmin
1 Replies

9. Shell Programming and Scripting

Perl: tk question

When i run my perl/tk script, a perl window pops up behind the GUI window,, can this be hidden???? Also, can the Icon be changed, the Tk icon in every window??? (1 Reply)
Discussion started by: perleo
1 Replies

10. Shell Programming and Scripting

Question about Perl

Where can i find solid information about programming in Perl? Thank you in advance!!!:) (5 Replies)
Discussion started by: SolidSnake
5 Replies
Login or Register to Ask a Question