Вот версия Функции 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
Я считаю, что:
$self->{myArray} returns a reference.
Вы хотите вернуть массив:
@{$self->{myArray}}
$ self -> {myArray}
- ссылка на массив. Вам необходимо разыменовать его.
my @myArray = @{ $self->{myArray} };
В подобных ситуациях очень полезен модуль Data :: Dumper
. Например, если @myArray
ведет себя не так, как ожидалось, вы можете запустить этот код, чтобы выявить проблему.
use Data::Dumper;
print Dumper(\@myArray);
$ self -> {myArray} - это ссылка на массив, а не на массив - вы не можете хранить фактические массивы внутри хеша, только ссылки. Попробуйте следующее:
my $myArray = $self->{myArray};
for my $foo (@$myArray){
# do something with $foo
}
Вы также можете посмотреть perldoc perlref .