对Perl的加入和拆分感到困惑

1 perl

我刚开始使用Perl,我很困惑何时使用joinsplit用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;
Run Code Online (Sandbox Code Playgroud)

例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;
Run Code Online (Sandbox Code Playgroud)

为什么join在第一个例子和split第二个例子中使用?谢谢.

dus*_*uff 7

这段代码

@arrayCmd = join(/\n/, $cmd);
Run Code Online (Sandbox Code Playgroud)

不正确,无法正常工作.作者意图使用split; 通过这种改变,这个例子看起来很有效.

快速解释这些差异,因为这本书显然做得不好:

  • $combined = join($separator, @items) 所有项目连接@items在一起,放入$separator每个项目之间,并返回单个组合字符串.

  • @pieces = split(/regex/, $string) $string在正则表达式匹配的每个位置分开,并返回一个切割字符串数组.(以及正则表达式捕获的任何内容.)