Значения оптимальной практики для функции разделения функций Perl parm

Я разбираю строку в подпрограмме, которая задает фиксированное количество параметров и два необязательных параметра. Нотабене Я также указываю используемую строку параметров.

Эта строка параметров имеет вид:

local_fs_name rem_fs_name timeout diff_limit hi hihi (rem_hi) (rem_hihi)

так что определенно шесть параметров с двумя необязательными параметрами для максимум восьми.

Если верхний предел установлен на максимальное количество параметров или один больше максимального, т. Е. Восемь или девять?

0
nl ja de
Отлично! Никто не справился и вставил вывод из perldoc -f split!
добавлено автор Rob Wells, источник
Отлично! Никто не справился и вставил вывод из perldoc -f split!
добавлено автор Rob Wells, источник

4 ответы

Единственные причины ограничения количества полей split возвращаются, что я могу думать о них либо для целей эффективности (и ваша подпрограмма должна была бы называться lot с помощью очень много больше параметров, чем это необходимо для этого), или если вы действительно хотите сохранить разделители в конечном поле.

Вы не должны использовать split , чтобы проверить количество параметров. Извлеките все из них в массив, а затем проверьте содержимое массива. Что-то вроде этого:

my $params = 'local_fs_name rem_fs_name timeout diff_limit hi hihi rem_hi rem_hihi';
my @params = split ' ', $params;

if (@params < 6 or @params > 8) {
  die "Usage: mysub local_fs_name rem_fs_name timeout diff_limit hi hihi [rem_hi [rem_hihi]]\n";
}
3
добавлено
Это не вопрос эффективности. Это влияет на результат.
добавлено автор ikegami, источник
Спасибо @Borodin, я полностью согласен о разделении на массив, а затем проверяет количество полученных кусков! Только проблемы серьезно заражены «менталитетом», но мы всегда так делали. Учитывая размер систем и количество существующего кода, я могу в определенной степени понять их подход.
добавлено автор Rob Wells, источник

Единственные причины ограничения количества полей split возвращаются, что я могу думать о них либо для целей эффективности (и ваша подпрограмма должна была бы называться lot с помощью очень много больше параметров, чем это необходимо для этого), или если вы действительно хотите сохранить разделители в конечном поле.

Вы не должны использовать split , чтобы проверить количество параметров. Извлеките все из них в массив, а затем проверьте содержимое массива. Что-то вроде этого:

my $params = 'local_fs_name rem_fs_name timeout diff_limit hi hihi rem_hi rem_hihi';
my @params = split ' ', $params;

if (@params < 6 or @params > 8) {
  die "Usage: mysub local_fs_name rem_fs_name timeout diff_limit hi hihi [rem_hi [rem_hihi]]\n";
}
3
добавлено
Это не вопрос эффективности. Это влияет на результат.
добавлено автор ikegami, источник
Спасибо @Borodin, я полностью согласен о разделении на массив, а затем проверяет количество полученных кусков! Только проблемы серьезно заражены «менталитетом», но мы всегда так делали. Учитывая размер систем и количество существующего кода, я могу в определенной степени понять их подход.
добавлено автор Rob Wells, источник

Это не вопрос стиля (передовой практики).

split ' ', $_

а также

split ' ', $_, 6

производят разные результаты, когда предоставляются 7+ аргументов.

>perl -E"say +( split ' ', 'a b c d e f g'    )[5]"
f

>perl -E"say +( split ' ', 'a b c d e f g', 6 )[5]"
f g

Мое лучшее предположение заключается в том, что вы не хотите ограничивать.

Тогда возникает вопрос, хотите ли вы сохранить конечные поля или нет.

>perl -E"@a=split(' ', 'a b c d e '    ); say [email protected];"
5

>perl -E"@a=split(' ', 'a b c d e ', -1); say [email protected];"
6

Мое лучшее предположение заключается в том, что конечные пробелы не значительны.

1
добавлено

Это не вопрос стиля (передовой практики).

split ' ', $_

а также

split ' ', $_, 6

производят разные результаты, когда предоставляются 7+ аргументов.

>perl -E"say +( split ' ', 'a b c d e f g'    )[5]"
f

>perl -E"say +( split ' ', 'a b c d e f g', 6 )[5]"
f g

Мое лучшее предположение заключается в том, что вы не хотите ограничивать.

Тогда возникает вопрос, хотите ли вы сохранить конечные поля или нет.

>perl -E"@a=split(' ', 'a b c d e '    ); say [email protected];"
5

>perl -E"@a=split(' ', 'a b c d e ', -1); say [email protected];"
6

Мое лучшее предположение заключается в том, что конечные пробелы не значительны.

1
добавлено
Modern::Perl
Modern::Perl
362 участник(ов)

Пожалуйста, представьтесь при добавлении в группу. Это необходимо во избежание спам-ботов. Ваше первое сообщение не должно быть ссылкой или репостом. Мы всегда рады нестандартным вопросам.

use Perl or die;
use Perl or die;
164 участник(ов)

Группа о языке Perl и обо всём что с ним связано.

pro.perl
pro.perl
22 участник(ов)

Язык программирования Perl