#perl
#perl
Вопрос:
Я не могу распечатать значения элементов массива, как ожидалось. @array = (1,2,3,4,5,6,7,8);
Я хочу присвоить первое значение переменной a, а второе — переменной b
for (my $index = 0; $index <= $# array; $index ) {
my $a = @array[$index];
my $b = @array[$index 1];
DEBUG("DEBUG:: $a and $b");
}
Я хочу выводить как
a=1 and b=2
a=3 and b=4
a=5 and b=6
Комментарии:
1.
for (my $index = 0; $index <= $# array; $index )
это способ записиfor my $index (0..$#array)
2. Избегайте использования
$a
и$b
, поскольку их использование может конфликтовать сsort
и другими функциями с обратными вызовами.
Ответ №1:
Основная причина вашей проблемы заключается в том, что вы должны использовать ‘$index = 2’ вместо ‘$index ‘ для увеличения $index.
Ответ №2:
#!/usr/bin/perl
use strict;
use warnings;
my @array = (1,2,3,4,5,6,7,8);
my %hash = @array;
while (my ($key,$value) = each %hash) {
print "Key is $key, Value is $valuen";
}
Другой способ
#!/usr/local/bin/perl
use strict;
use warnings;
my @array = (1,2,3,4,5,6,7,8);
for (my $count=0; $count<@array; $count =2){
print "A is $array[$count], B is $array[$count 1]n";
}
Ваш способ
#!/usr/local/bin/perl
use strict;
use warnings;
my @array = (1,2,3,4,5,6,7,8);
for ( my $index=0;$index<=$#array;$index =2) {
my $a1 = @array[$index];
my $b1 = @array[$index 1];
print "A is $a1, B is $b1n";
}
Комментарии:
1. Спасибо, ты звезда
2. Первый вариант будет печатать их парами, но они могут быть не в порядке
3. Да, поскольку он находится в хэше. Я не уверен, нужен ли OP упорядоченный вывод. Я отредактирую, если он подтвердит.
Ответ №3:
Когда я правильно понимаю вашу проблему, вы хотите иметь цикл, увеличивающийся на 2:
use strict;
use warnings;
use feature 'say';
my @array = (1, 2, 3,4,5,6,7,8);
my (@array_a, @array_b);
for (my $count=0; $count < $#array; $count =2) {
say "a is $array[$count], b is $array[$count 1]";
}
Вывод:
a is 1, b is 2
a is 3, b is 4
a is 5, b is 6
a is 7, b is 8
Ответ №4:
Вы могли бы использовать оператор модуля:
#!/usr/bin/perl
use warnings;
use strict;
my @array = (1 .. 8);
foreach (@array){
$_ % 2 == 0 ? print "b = $_n" : print "a = $_t";
}
—
a = 1 b = 2
a = 3 b = 4
a = 5 b = 6
a = 7 b = 8
Ответ №5:
Очень простой подход, который еще не упоминался:
while (@array) {
my $x = shift(@array);
my $y = shift(@array);
DEBUG("DEBUG:: $x and $y");
}
Однако это имеет побочный эффект опорожнения @array
.
Ответ №6:
Как отмечали другие, простое решение заключается в изменении вашего приращения цикла на = 2
. Альтернативный подход заключается в использовании splice
:
my @array = (1,2,3,4,5,6,7,8);
while (my ($x, $y) = splice @array, 0, 2) {
DEBUG("DEBUG:: $x and $y");
}
Это удаляет элементы из @array
, поэтому вам может потребоваться сначала сделать копию.