Perl debugger problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl debugger problem
# 1  
Old 10-09-2012
Perl debugger problem

Hi gurus, during debugging script I noticed some very strange behavior. The 1st task is to trim last character of string stored in $temp1 variable, this can be done using either chop($temp1) or more complicated substr($temp1, 0, length($temp1) - 1). Those both codes works as oneliners but in my script the substr solution did not works. Bellow is example from debugger:


1st TASK:
=========

1st SOLUTION - DID NOT WORKING:
===============================

Code:
main::(delmid_n.pl:24):	    if (($state == 0) && ($_ !~ $musr) && ($_ !~ $lusr)) {
>> n
main::(delmid_n.pl:54):	        $strprn=substr($temp1, 0, length($temp1) - 1);
>> p $temp1
                (-,user2,t-mobile.co.uk)\

>> p substr($temp1, 0, length($temp1) - 1) . "\n";
                (-,user2,t-mobile.co.uk)


  DB<4> 
main::(delmid_n.pl:55):		print $strprn . "\n";
  DB<4> 


main::(delmid_n.pl:56):	        $temp1 = "";
  DB<4>

As you can see in the $strprn variable nothing is stored but if the same piece of code (which is stored into $strprn variable) is printed via 'p' command the output is OK. This "bug" can be overcomed using mentioned chop() function, see code bellow:


2nd SOLUTION - WORKING:
=======================
Code:
main::(delmid_w.pl:24):	    if (($state == 0) && ($_ !~ $musr) && ($_ !~ $lusr)) {
>> p $temp1
                (-,user2,t-mobile.co.uk)\

  DB<4> n
main::(delmid_w.pl:56):		chop ($temp1);
  DB<4> n
main::(delmid_w.pl:57):		print $temp1;
  DB<4> n
                (-,user2,t-mobile.co.uk)
main::(delmid_w.pl:58):	        $temp1 = "";
  DB<4>


The above code is exactly the same as first example but following two lines from 1st example:

Code:
$strprn=substr($temp1, 0, length($temp1) - 1);
print $strprn . "\n";


are replaced with following two lines in 2nd example:

Code:
chop ($temp1);
print $temp1;


What is wrong with 2nd solution ?






2nd TASK:
=========
Second task is quiet simple matching the string against regexp, but it is not working for me:

Code:
  DB<1> 
main::(delbeg_n.pl:15):	$state = 0;
  DB<1> 
main::(delbeg_n.pl:16):	$muser = qr/\(-,user1,[^,]+\.co\.uk\)\\$/;
  DB<1> 
main::(delbeg_n.pl:19):	line: while (<>) {
  DB<1> 
main::(delbeg_n.pl:20):	    chomp;      # strip record separator
  DB<1> 
main::(delbeg_n.pl:21):	    @Fld = split(/\s+/, $_,);
  DB<1> 
main::(delbeg_n.pl:23):	    if (($state == 0) && ($Fld[1] =~ $muser)) {
  DB<1> p $Fld[1]        
(-,user1,one2one.co.uk)\

  DB<2> n
main::(delbeg_n.pl:43):	        print $_;
  DB<2> p $_
netgroup1       (-,user1,one2one.co.uk)\

  DB<3> if ($Fld[1] =~ $muser) {print "TRUE"}
TRUE

This is problem which I did not workaroud so far.


As you can see after executing line 21 in code the next execution line is 43 (the else statement). Why following condition is not evaluated as a true and code did not continues with line 23, 24, 25 ...

Code:
if (($state == 0) && ($Fld[1] =~ $muser))


Following line was inserted as a demonstration that condition should be evaluated as a true.

Code:
if ($Fld[1] =~ $muser) {print "TRUE"}


Thanks a lot.
# 2  
Old 10-09-2012
Use
Code:
chomp

not
Code:
chop

# 3  
Old 10-10-2012
It has been already done but you seen results in above post.

Code:
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
    if $running_under_some_shell;
                        # this emulates #! processing on NIH machines.
                        # (remove #! line above if indigestible)

eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
                        # process any FOO=bar switches

$[ = 1;                 # set array base to 1
$, = ' ';               # set output field separator
$\ = "\n";              # set output record separator

$state = 0;
$temp1 = "";
$temp2 = "";
$musr = qr/\(-,user3,[^,]+\.co\.uk\)\\$/;
$lusr = qr/\(-,user3,[^,]+\.co\.uk\)$/;
$strprn="";

while (<>) {
    chomp;      # strip record separator

    if (($state == 0) && ($_ !~ $musr) && ($_ !~ $lusr)) {
        if (length($temp1) != 0) {
            print $temp1;
        }

        $temp0 = $_;
        $state = 1;
    }
    elsif (($state == 1) && ($_ !~ $musr) && ($_ !~ $lusr)) {
        if (length($temp0) != 0) {
            print $temp0;
        }

        $temp1 = $_;
        $state = 0;
    }
    elsif (($state == 0) && ($_ =~ $musr)) {
        $state = 2;
    }
    elsif (($state == 2) && ($_ =~ $musr)) {
        $state = 3;
    }
    elsif (($state == 3) && ($_ !~ $musr) && ($_ !~ $lusr)) {
        print $temp1;
        print $_;
        $temp1 = "";
        $temp0 = "";
        $state = 1;
    }
    elsif (($state == 2) && ($_ =~ $lusr)) {
        $strprn=substr($temp1, 0, length($temp1) - 1);
	print $strprn . "\n";
        $temp1 = "";
        $state = 0;
    }
    else {
	print "Error at line " . $.; exit $.;
    }
}

if ($state == 0) {
    print $temp1;
}
elsif ($state == 1) {
    print $temp0;
}
else {
    exit $.;
}

#exit $ExitValue;

Input file:
Code:
netgroup1       (-,user1,one2one.co.uk)\
                (-,user1,t-mobile.co.uk)\
                (-,user2,one2one.co.uk)\
                (-,user2,t-mobile.co.uk)\
                (-,user3,one2one.co.uk)\
                (-,user3,t-mobile.co.uk)
netgroup2       (-,user4,one2one.co.uk)\
                (-,user4,t-mobile.co.uk)\
                (-,user5,one2one.co.uk)\
                (-,user5,t-mobile.co.uk)\
                (-,user6,one2one.co.uk)\
                (-,user6,t-mobile.co.uk)
netgroup3       (-,user7,one2one.co.uk)\
                (-,user7,t-mobile.co.uk)\
                (-,user8,one2one.co.uk)\
                (-,user8,t-mobile.co.uk)\
                (-,user9,one2one.co.uk)\
                (-,user9,t-mobile.co.uk)

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Web Development

problem with exporting vairable from one perl cgi to another perl cgi script while redirecting.

Can anyone tell me how to export a variable from one perl CGI script to another perl cgi script when using a redirect. Upon running the login.pl the user is prompted to enter user name and password. Upon entering the correct credentials (admin/admin) the user is redirected to welcome page. My... (3 Replies)
Discussion started by: Arun_Linux
3 Replies

2. Programming

ddd/gdb debugger problem

I hope this is the right thread - not sure if it belongs in the Linux forum. Anyway, I'm having an issue with ddd and gdb. When using ddd to run gdb, there are extra parameters being appended, and my program is picking them up. I'm running on Ubuntu 11.04... Here's my command line entry - ... (1 Reply)
Discussion started by: jalburger
1 Replies

3. Programming

Alternative debugger to GNU insight debugger

GNU insight debugger is not available now a days and it is required to debug/inspect assembly code as written in the book Assembly Language Programming step by step in Linux so my question is; is there any alternative to insight that I can use instead of insight in which I can get the same... (5 Replies)
Discussion started by: vectrum
5 Replies

4. Shell Programming and Scripting

Perl execution debugger

If this is the wrong forum, move it. It seemed like the best. Does anyone know of a perl thing that does the same thing as bash -x except for perl? I know I can output the information I want at the right times by actually putting that in the code, but it's harder... (2 Replies)
Discussion started by: killer54291
2 Replies

5. Solaris

Csharp Debugger

I want to debug my csharp project on solaris. Is anyone can tell me a program or anything else for this?? (0 Replies)
Discussion started by: dConstantine
0 Replies

6. Programming

Dbx Debugger

I have tried lots of stuff but i can't get it working, i have also found a Thread in this Forum about it but it didn't describe how the program has to be run ect. My issue is that i want to run a program with multiple arguments eg. ./myprog arg1 arg2 arg3 arg4 arg5 with dbx, but i cant get... (8 Replies)
Discussion started by: alcatros
8 Replies

7. Programming

Good C debugger ?

I'm a C newbie using gcc. I wrote a program but a part of it outputs gibberish onto the terminal. Its weird because identical parts of the program work correctly in another program I wrote :confused:. My program uses c99 + some POSIX headers. It compiles with no errors/warnings even though I have... (15 Replies)
Discussion started by: cyler
15 Replies

8. Programming

multiprocess debugger

Hi, can somebody advise on a better multiprocess debugger? I heard with gdb we face lots of problems in multiprocess scenario currently i am using gdb debugger for a single process multithreaded project.. since i am supposed to work on a multiprocess now, i googled and came across... (1 Reply)
Discussion started by: rvan
1 Replies

9. UNIX for Advanced & Expert Users

Kernel debugger

hi, I want to have a debugger for my kernel and I am using kernel-2.6.11 n i am having patches kdb-v4.4-2.6.11-common-1.bz2 kdb-v4.4-2.6.11-i386-1.bz2. I applied both. I did make menuconfig with options CONFIG_KDB n CONFIG_FRAME_POINTER being set. when i tried to compile kernel. I got an... (0 Replies)
Discussion started by: sriram.ec
0 Replies

10. Programming

wdb debugger

Hi all, is it possible to skip a function with the wdb debugger ? could be helpful instead of compiling the whole bunch again does someone know how to do this ? thx Sven (4 Replies)
Discussion started by: Sven28
4 Replies
Login or Register to Ask a Question