【发布时间】:2019-02-19 21:40:06
【问题描述】:
我刚开始使用 Perl,我对何时使用 join 或 split 来用 Linux 命令结果填充数组感到困惑。
我正在从一本书中学习,这带来了这些例子。
示例 1:
$cmd = `host google.com`;
@arrayCmd = join(/\n/, $cmd);
foreach $i (@arrayCmd) {
if ( $i =~ / has address / ) {
$i =~ /.*\s([0-9\.]+)\s.*/;
my $ip = $1;
if ( $ip =~ /[0-9\.]+/ ) {
print "La IP es: " . $ip . "\n";
last;
}
}
}
exit;
示例 2:
$max = 80;
$sisdev = "/dev/sda5";
$comando = `df -k`; # cargamos las líneas del comando a una variable
@lns = split(/\n/, $comando); # separamos cada línea y las colocamos
# como elementos de un array
foreach $linea ( @lns ) { # por cada $linea del array @lns
if ( $linea =~ /$sisdev/ ) {
$linea =~ /.*\s([0-9]+)\%\s.*/;
$valor = $1; # buscamos la columna y
# extraemos el valor
if ( $valor >= $max ) { # comparamos el valor
# con el umbral
print "Alarma!: $sisdev en $valor\%. Igual o por encima del umbral de $max\% \n";
}
}
}
exit;
为什么在第一个示例中使用join,在第二个示例中使用split?
谢谢。
【问题讨论】:
-
把书扔进垃圾桶。它的标题是什么?
-
你的困惑是对的。
split对正则表达式和标量进行操作以生成列表,如第一个示例所示,而不是join。join对标量和列表进行操作并生成标量。
标签: perl