Perl命令行应用程序详解

2019-10-01 10:56:45刘景俊

    my @chars = (0 .. 9, 'a' .. 'z', 'A' .. 'Z');
    return join '', @chars[ map rand @chars, 0 .. $length ];
}
print random_pwd(42);

生成42位长度的密码


use strict;
use warnings;
my @chars=("a".."z",0..9);

my $password="";
foreach(1..42){
  my $char=$chars[int(rand(@chars))];
  $char=uc($char) if rand() <0.5;
  $password.=$char;
}

print $password . "n";

-------------------------------
my @chars = ('0'..'9', 'a'..'z', 'A'..'Z');
my $passwd =
   join '',
    map $chars[rand(@chars)],
     1..42;

调用String::Random模块来实现:


use strict;
use warnings;
use String::Random 'random_regex';

print random_regex('[a-zA-Z]{42}'), "n";

使用perl in one line来完成:


perl -le "print map { ('a'..'z', 'A'..'Z', '0'..'9')[rand 62] } 1..42"

perl -le 'print map { ("a".."z")[rand 26] } 1..8'

perl -le 'print map { ("a".."z", 0..9)[rand 36] } 1..8'

perl -le 'print map { (q(a)..q(z))[rand(26)] } 1 .. 10'

相关问题参考:
--------------------------------------------------------------------------
Perl one-liner with single quote-perl命令行里处理单引号
示例如下:


echo "a,b" | perl -F',' -lane 'print $F[0];'
'a'

echo "a,b" | perl -F',' -lane 'print qq('$F[0]');'
[0]

echo "a,b" | perl -F',' -lane 'print q('$F[0]');'
[0]

以上三种方法都不能达到预期,可以使用'-w'参数来进行控制,但其在变量环境无法使用。


perl -lwe "print q( i'am );"
i'am

perl -lwe "$b=q( didn't ); print $b"

这里却没有了输出。

解决办法:
1、使用'''转义。


echo "a,b" | perl -F',' -lane 'print "'''$F[0]'''";'
'a'

2、使用'''的ASCII码


echo "a,b" | perl -F',' -lane 'print "$F[0]47";'
a'

echo "a,b" | perl -F',' -lane '$sq="47"; print "$sq$F[0]$sq";'