First, bravo on the code. I really suck at writing recursive subs. I didn't intend to rewrite your code. I was just trying to rid it of global variables. Please don't take offense.
I don't like the idea of using @tab as a global. IMO, it would be better to use it as a private variable instead.
{
my @tab;
sub teledecode {
my $tocode = $_[0];
my @telecode = ();
my $i = 0;
foreach my $byte ( split //, $tocode ) {
$telecode[$i] = $telear[$byte];
$i++;
}
@tab = ();
return arrangecode( "", 0, @telecode );
}
sub arrangecode {
my ( $first, $i, @dat ) = @_;
foreach my $j ( @{ $dat[$i] } ) {
if ( $i < ( @dat - 1 ) ) {
@tab = arrangecode( $first . $j, $i + 1, @dat );
}
# I thnk it is faster written as
# push @tab, $first . $j;
else { $tab[@tab] = $first . $j; }
}
return @tab;
}
}
Now teledecode() is not using @tab globally, but @telear is still a global. We could suck it into this scope, but it is used to make %telealph. It would be nicer if we could condence teledecode() to one line. What if we use an array slice ...
sub teledecode {
@tab = ();
return arrangecode( '', 0, @telear[ split //, $_[0] ] );
}
Now we could move this array slice outside the sub.
foreach my $toto (@ARGV) {
if ( $toto =~ /-d=(\d+)/ ) {
# Perhaps a description of what that slice
# is doing would help the code maintainer :)
print foreach teledecode( @telear[ split //, $1 ] );
}
elsif ( $toto =~ /-s=([a-zA-Z_]+)/ ) {
print smstype($1); # typo fixed by b10m (thanks)
}
else {
print telecode($toto);
}
}
{
my @tab;
sub teledecode {
@tab = ();
return arrangecode( '', 0, @_ );
}
sub arrangecode {
my ( $first, $i, @dat ) = @_;
foreach my $j ( @{ $dat[$i] } ) {
if ( $i < ( @dat - 1 ) ) {
@tab = arrangecode( $first . $j, $i + 1, @dat );
}
else { push @tab, $first . $j; }
}
return @tab;
}
}
We could use a hash slice in place of telecode() as well. Removing the last global variable.
else {
# This slice should probably explained.
print join '', @telealph{ split //, uc( $toto ) };
}
HTH,
Charles
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.