in reply to Silly "encryption".....just for fun ;)

sub foo { my $x = shift; vec($x, $_ - 1, 8) += $_ for 1..length($x); $x; }

-- Randal L. Schwartz, Perl hacker

Replies are listed 'Best First'.
Re: •Re: Silly "encryption".....just for fun ;)
by Guitarded (Novice) on Jul 29, 2002 at 20:22 UTC
    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?
      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

      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...