in reply to •Re: Silly "encryption".....just for fun ;)
in thread Silly "encryption".....just for fun ;)

Roger that Vector, Victor... :) I now have:
if (@ARGV && $ARGV[0] ne "-u") { print "\nInvalid option.\n"; die "usage: lamencrypt.pl [option] (-u decrypts)\n"; } print "\nEnter string to translate: "; chomp(my $x = <STDIN>); my @output = foo($x); sub foo { my $x = shift; if (@ARGV && @ARGV[0] =~ /-u/) { vec($x, $_ - 1, 8) -= $_ for 1..length($x); } else { vec($x, $_ - 1, 8) += $_ for 1..length($x); } return $x; } print "\nLamely encrypted: "; print "@output\n";

BTW, I tried to use the ternary operator ?: , as in:
@ARGV && @ARGV[0] =~ /-u/ ? vec($x, $_ -1, 8) -= $_ for 1..length($x) +: vec($x, $_ -1, 8) += $_ for 1..length($x);

...but it aborted due to a syntax error near "$_ for". I tried declaring local $_, because I thought perhaps $_ was being clobbered, but it didn't help. Can anyone tell me why that didn't work?

Replies are listed 'Best First'.
•Re: Re: •Re: Silly "encryption".....just for fun ;)
by merlyn (Sage) on Jul 29, 2002 at 21:27 UTC
    Can anyone tell me why that didn't work?
    Because "EXPR for EXPR" is not an EXPR, but a STATEMENT. And question-colon selects EXPRs, not STATEMENTs.

    That's also why "EXPR for EXPR for EXPR" doesn't work.

    -- Randal L. Schwartz, Perl hacker

Re: Re: &bull;Re: Silly "encryption".....just for fun ;)
by runrig (Abbot) on Jul 29, 2002 at 21:59 UTC
    You could do:
    my $flg = (@ARGV && @ARGV[0] =~ /-u/)? -1 : 1; vec($x, $_ - 1, 8) += $flg * $_ for 1..length($x);
    Also, as long as you're doing this for education, take a look at Getopt::Std, and that ARGV logic can be simplified further...