Печать списка счетчиков Perl с запятыми, кроме последнего - PullRequest
0 голосов
/ 20 февраля 2019

Я столкнулся с проблемой при попытке выполнить Perl-скрипт, который принимает 2 числовых аргумента, скажем, $ ARGV [0] равно 2, а $ ARGV [1] равно 4. Мне нужно напечатать список, который показывает 2,3,4 без запятой после последнего пункта.Ниже приведен мой сценарий таким, какой он есть сейчас:

unless ((@ARGV)==2){
        print "error: incorrect number of arguments",
        "\n",
        "usage: inlist.pl a b (where a < b)",
        "\n";
                exit VALUE;
}

if ($ARGV[0] > $ARGV[1]){
        print "error: first argument must be less than second argument",
        "\n",
        "usage: intlist.pl a b (where a < b)",
        "\n";
                exit VALUE;
}
else {

        $COUNTER=$ARGV[0];

        while($COUNTER <= $ARGV[1]){
 print $COUNTER;
                $COUNTER += 1;
        if ($COUNTERELATIONAL < $ARGV[1]){
                print ", ";
        }
        else {
                print "\n";
        }
$COUNTERSYNTAX
        }
}
exit VALUE;

Я пытался использовать соединение, но безрезультатно получаю в качестве возврата 2,3,4,

Я чувствую, что должен бытьпропустить что-то простое

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Переписав свой код, чтобы упростить его:

# Prefer 'if' over 'unless' in most circumstances.
if (@ARGV != 2) {
    # Consider using 'die' instead of 'print' and 'exit'.
    print "error: incorrect number of arguments\n",
          "usage: inlist.pl a b (where a < b)\n";

    # Not sure what VALUE is, but I assume you've
    # defined it somewhere.
    exit VALUE;
}

if ($ARGV[0] > $ARGV[1]) {
    # Consider using 'die' instead of 'print' and 'exit'.
    print "error: first argument must be less than second argument\n",
          "usage: intlist.pl a b (where a < b)\n";

    exit VALUE;
}

# Removed 'else' branch as it's unnecessary.
# Use 'join' instead of a complicated loop.
print join(',', $ARGV[0] .. $ARGV[1]), "\n";

# This looks like a successful execution to me, so
# that should probably be 'exit 0'.
exit VALUE;

Если бы я писал его для себя, я бы сделал его немного короче:

my %errors = (
  NUMBER => 'incorrect number of arguments',
  RANGE  => 'first argument must be less than second argument',
);

my $usage = 'usage: inlist.pl a b (where a < b)';

die "$errors{NUMBER}\n$usage\n" if @ARGV != 2;
die "$errors{RANGE}\n$usage\n"  if $ARGV[0] > $ARGV[1];

print join(',', $ARGV[0] .. $ARGV[1]), "\n";

exit 0;
0 голосов
/ 20 февраля 2019

Я понял это:

while($COUNTER <= $ARGV[1]){
        print $COUNTER;
        $COUNTER += 1;
if ($COUNTER <= $ARGV[1]){
        print ", ";
}
else {
        print "\n";
}

Мне нужно было изменить значение if на $ COUNTER и <=, и оно было напечатано правильно.Спасибо за предложение о присоединении, это сработало бы, если бы я разработал сценарий более эффективно </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...