我需要解密才能进入ROT-25,我认为我已经设置好了。接下来,它需要解密从命令行读入的文件以及我的问题所在的位置。我猜它必须像perl filename anyfile.txt一样运行,但我该如何设置呢?
#!/Strawberry/perl/bin/perl
use v5.14;
my ($file1) = @ARGV;
open my $fh1, '<', $file1;
while (<$fh1>) {
sub encode_decode {
shift =~ tr/A-Za-z/Z-ZA-Yz-za-y/r;
}
my $enc = encode_decode();
my $dec = encode_decode($enc);
say "Enc: ", $enc;
say "Dec: ", $dec;
}
close $fh1;
答案 0 :(得分:1)
这里有几个问题。首先,使用与encode_decode()
相同逻辑的函数对ROT25没有意义,仅适用于ROT13。要创建初始编码文件,可以使用Unix来执行此操作:
echo "The secret of getting ahead is getting started -- Mark Twain" | tr "A-Za-z" "Z-ZA-Yz-za-y" > encoded_twain.txt
然后在encoded_twain.txt上运行你的程序
因为你需要确定&#34;&#34;&#34;在文本中出现任何内容,逐行阅读文件并不是最好的选择。你最好把它作为单个字符串读取,然后解码和测试它。
你的解码器必须做与现在相反的事情(编码。)
总而言之,我们得到的结论是:
use English;
my $file_name = shift;
sub decode
{
return shift =~ tr/Z-ZA-Yz-za-y/A-Za-z/r;
}
open my $file_handle, '<', $file_name;
my $encoded = '';
{ # allow us to read entire file in as a string:
local $INPUT_RECORD_SEPARATOR = undef;
$encoded = <$file_handle>;
}
close $file_handle;
my $decoded = &decode($encoded);
if ($decoded =~ m/(^| )the /m) # make this more robust!
{
print($decoded);
}
答案 1 :(得分:0)
只做一个小改动,要么声明一个变量来保持当前行(或使用$_
):
open my $fh1, '<', $file1;
while ( my $line = <$fh1> ) {
my $dec = decode( $line );
# say "Dec: ", $dec;
}
close $fh1;
您可以测试&#34;&#34;的解码行。如果找到,请再次打开文件并打印所有行。