Как я могу выполнить итерации по ссылке на массив Perl?

Вот версия Функции Microsoft SQL Server:

CREATE FUNCTION [Internal].[GetNumberAsOrdinalString]
(
    @num int
)
RETURNS nvarchar(max)
AS
BEGIN

    DECLARE @Suffix nvarchar(2);
    DECLARE @Ones int;  
    DECLARE @Tens int;

    SET @Ones = @num % 10;
    SET @Tens = FLOOR(@num / 10) % 10;

    IF @Tens = 1
    BEGIN
        SET @Suffix = 'th';
    END
    ELSE
    BEGIN

    SET @Suffix = 
        CASE @Ones
            WHEN 1 THEN 'st'
            WHEN 2 THEN 'nd'
            WHEN 3 THEN 'rd'
            ELSE 'th'
        END
    END

    RETURN CONVERT(nvarchar(max), @num) + @Suffix;
END
17
задан Peter Mortensen 24 April 2016 в 07:32
поделиться

3 ответа

Я считаю, что:

$self->{myArray} returns a reference.

Вы хотите вернуть массив:

@{$self->{myArray}}
28
ответ дан 30 November 2019 в 11:04
поделиться

$ self -> {myArray} - ссылка на массив. Вам необходимо разыменовать его.

my @myArray = @{ $self->{myArray} };

В подобных ситуациях очень полезен модуль Data :: Dumper . Например, если @myArray ведет себя не так, как ожидалось, вы можете запустить этот код, чтобы выявить проблему.

use Data::Dumper;
print Dumper(\@myArray);
10
ответ дан 30 November 2019 в 11:04
поделиться

$ self -> {myArray} - это ссылка на массив, а не на массив - вы не можете хранить фактические массивы внутри хеша, только ссылки. Попробуйте следующее:

my $myArray = $self->{myArray};
for my $foo (@$myArray){
   # do something with $foo
}

Вы также можете посмотреть perldoc perlref .

7
ответ дан 30 November 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: