Quiero conocer las mejores prácticas aquí. Supongamos que quiero obtener el contenido de alguna línea de un archivo. Puedo usar un comando de shell de una línea para obtener mi respuesta, o escribir una subrutina, como se muestra en el siguiente código.En scripts Perl, ¿debemos usar comandos de shell o llamar a funciones de Perl que imiten las operaciones de shell?
Un archivo de texto denominado some_text
:
She laughed. Then both continued eating in silence, like strangers,
but after dinner they walked side by side; and there sprang up
between them the light jesting conversation of people who are free
and satisfied, to whom it does not matter where they go or what
they talk about.
código para obtener el contenido de la línea 5 del archivo
#!perl
use warnings;
use strict;
my $file = "some_text";
my $lnum = 5;
my $shellcmd = "awk 'NR==$lnum' $file";
print qx($shellcmd);
print getSrcLine($file, $lnum);
sub getSrcLine {
my($file, $lnum) = @_;
open FILE, $file or die "$!";
my @ray = <FILE>;
return $ray[$lnum-1];
}
lo pregunto porque veo un montón de scripts de Perl, donde en algún momento, se invocó un comando de shell, mientras que en algún momento posterior, la misma tarea se realizó mediante una llamada a una función (de biblioteca o manuscrita), por ejemplo, rm -rf
frente a File::Path::rmtree
. Solo quiero que sea consistente.
¿Qué es lo que se recomienda hacer?
La manera recomendada depende de la intención del código. Si desea ejecutar en la máquina Non-Unix, vaya a las bibliotecas de Perl, mire el enlace que he publicado. Espero que esto ayude ... – Rajeev
Quizás cada uno de los scripts fue desarrollado durante un período de tiempo, posiblemente por múltiples programadores. Los guiones evolucionaron, y el código no es 100% auto consistente, dependiendo en parte de cómo los involucrados tenían más o menos experiencia con Perl y shell. –
Tenga en cuenta que aunque sorber un archivo de 5 líneas completo para obtener la quinta línea no es demasiado doloroso, probablemente sea una estrategia subóptima para obtener la quinta línea de un archivo de un millón de líneas. –