Я пытаюсь сортировать строчные строки из текстового файла на основе гласных, содержащихся в строке.Perl Сортировка строк символов
Пример: vowel1 будет подстрокой гласных, отображаемой в строке1, а гласной2 - соответствующей подстрокой строки2. Если подстрока vowel1 появляется перед гласным2 в восходящем порядке ASCII, строка string1 появляется перед строкой2 на выходе.
Я пытаюсь сделать это через хэш-таблицу, поскольку это похоже на структуру данных, которая имеет наибольший смысл.
Мой код:
#!/usr/bin/perl -w
use strict;
my %hash;
my $vow = my $w;
my $file = $ARGV[0];
open (IN, $file) or die "Could not open file: $!";
while (my $line = <IN>) {
$vow = ~s/[^aeiou]//g;
$hash{$vow}{$w} = 1;
}
close(IN);
foreach my $key (sort %hash) {
foreach my $word (sort %{$hash {$key}}){
print "$word\n";
}
}
Когда я компилирую программу это результаты.
Use of uninitialized value $_ in substitution (s///) at sort_strings.pl line 14, <IN> line 1.
Use of uninitialized value $w in hash element at sort_strings.pl line 16, <IN> line 1.
Can't use an undefined value as a HASH reference at sort_strings.pl line 23.
Я еще новичок в Perl и до сих пор путаюсь в некоторых вещах, которые вы можете и не можете сделать. Для справки о хэш-ссылке я думал, что вы можете просто ссылаться на нее с помощью%. Я видел код, который делает это с массивами.
Я знаю, что $w
неинициализирован, но значение для этого случая не имеет значения.
Есть ли лучший способ сделать это, чем то, как я это делаю?
Любая помощь очень ценится.
Edit (Sample Data):
Если у меня есть текстовый файл с этими словами
albatross,
apparate,
fanfare,
candelabra,
panacea,
vermeil,
parmesan,
albacore,
false,
beans,
Заказ должен быть:
apparate,
fanfare,
panacea,
albatross,
albacore,
false,
parmesan,
candelabra,
beans,
vermeil
У вас есть ошибка синтаксиса. Вместо '$ vow = ~ s/[^ aeiou] // g;' вам нужно '$ vow = ~ s/[^ aeiou] // g;' –
Некоторые примеры данных были бы полезны для отладки вашего кода. – Sobrique
Что такое 'my $ vow = my $ w;' - предназначенный для выполнения? Это почти наверняка не делает то, что вы думаете, что это делает. Вероятно, это источник вашего «неинициализированного значения как хэш-ref». (потому что '$ w' является' undef', когда вы вставляете его в свой хеш) – Sobrique