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";'









