in reply to Re^2: chopping the beginning and end of lines in 2 files
in thread chopping the beginning and end of lines in 2 files

Ah, much better! We don't care what your code looks like (actually, that's a lie) so long as you are prepared to take some advice and improve. This is lovely code - there is a ton of room for improvement. ;)

First off, always use strictures (use strict; use warnings;). Don't use $a and $b as variables - they are special (used by sort). Avoid the C style for loop - Perl's for loop is safer, clearer and cleaner.

Generally if you have parallel data try to use a single data structure for it so you don't have to double handle everything with the resultant duplication of code and much greater risk of errors.

Bearing that in mind consider:

use strict; use warnings; my $str1 = "a b c d e f g h i j"; my $str2 = "1 3 45 65 7 89 67 9 8 2"; my @seq = split (' ', $str1); my @arr = split (' ', $str2); my @data = map {[$seq[$_], $arr[$_]]} 0 .. $#seq; my $beg = 0; my $end = 0; for (@data) { last unless $_->[1] < 15; $beg++; } for (reverse @data) { last unless $_->[1] < 15; $end++; } print join (' ', map {$data[$_][0]} $beg .. $#arr - $end), "\n"; print join (' ', map {$data[$_][1]} $beg .. $#arr - $end), "\n";

Perl reduces RSI - it saves typing

Replies are listed 'Best First'.
Re^4: chopping the beginning and end of lines in 2 files
by heidi (Sexton) on Nov 14, 2008 at 03:07 UTC
    ahhh...this is how i want to improve coding, using map, grep etc etc. since this a small program, its ok, otherwise the program should take less time to run, which will happen only when the code is tight and has less number of loops. am i right?

      Well, it's not so much using map or grep as some sort of magic bullet replacement for a for loop (they still effectively loop), but more a matter of choosing the right tool for the job. Perl lets you do the same thing in a multitude of ways, and generally none of them is "the one true way". The trick is to find the combination of tools that make the intent of the code clear and maintainable - often execution time is secondary because I/O is the limiting factor.

      The mantra is: make it work first, then make it clean, then make it fast (if you need to). "Clean" and "Work" are often related - it's much harder to debug messy code than it is to debug clean code. Consider how easy it is to be off by one in a messy C for loop compared with a clean Perl for loop for example.


      Perl reduces RSI - it saves typing