Pregunta

Tengo un ejecutable de la aplicación, que se ejecuta con diferentes parámetros para producir diferentes salidas. Quiero dar algunos parámetros a esto desde los parámetros de la línea de comandos de la secuencia de comandos y los demás será local en el guión. Uso:

./dump-output.pl <version> <folder-name> <output-file>


my $version = $ARGV[0];
my $foldername = $ARGV[1];
my $outputfile = $ARGV[2];
my $mkdir_cmd = "mkdir -p ~/$foldername";

# There are 6 types of outputs, which can be created:
# 'a', 'b', 'c', 'd', 'e' or 'f'
my @outputtype = ('a', 'b', 'c', 'd', 'e', 'f');

my $mkdir_out = `$mkdir_cmd`;

for( $itr=0; itr<=5; itr++ ) {
    $my_cmd = "./my_app -v $version -t $outputtype[itr] -f $outputfile > ~/$foldername/$outputtype.out"
    $my_out = `$my_cmd`;
}

estoy haciendo algo intrínsecamente malo en el código anterior, pero no han sido capaces de averiguarlo: - (

¿Fue útil?

Solución

# Always include these at the top of your programs.
# It will help you find bugs like the ones you had.
use strict;
use warnings;

# You can get all arguments in one shot.
my ($version, $foldername, $outputfile) = @ARGV;

# A flag so we can test our script. When
# everything looks good, set it to 1.
my $RUN = 0;

my $mkdir_cmd = "mkdir -p ~/$foldername";
my $mkdir_out = run_it($mkdir_cmd);

# Word quoting with qw().
my @outputtype = qw(a b c d e f);

# If you already have a list, just iterate over it --
# no need to manually manage the array subscripts yourself.
for my $type (@outputtype) {
    my $my_cmd = "./my_app -v $version -t $type -f $outputfile > ~/$foldername/$type.out";
    my $my_out = run_it($my_cmd);
}

# Our function that will either run or simply print
# calls to system commands.
sub run_it {
    my $cmd = shift;
    if ($RUN){
        my $output = `$cmd`;
        return $output;
    }
    else {
        print $cmd, "\n";
    }
}

Otros consejos

El bucle for le faltan $

La matriz OutputType le falta un $itr para el índice

Puede haber más - no he probado. Se trata de las cosas obvias.

Parece que tal vez usted viene de un lenguaje como C, donde una variable puede ser un bareword como "i". Las variables en Perl siempre comienzan con $ para escalar, @ para la lista, % de hash.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top