LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

  • #!/usr/bin/env perl
  • Закрывай файловые дескрипторы (close)
  • Выдели парсинг отдельных (форматов) файлов в отдельные функции, тогда интерфейс станет проще
  • Запуск команд через backticks — сильно подвержен иньекциям. Посмотри в сторону IPC::Open3 или аналогов (IPC::run?)
  • Лучше не использовать sudo в скрипте, а требовать чтоб скрипт запускали с нужным EUID ($>). Иначе предоставлять конфиг для sudo вместе со скриптом.
  • Предпочитай не читать все сразу, а по линии:
    my $stdout = ...; # open3?
    while (my $line = <$stdout>) {
      chomp $line; # если надо
      ...
    }
    
  • Напиши людский help:
    my $help = <<"__HELP__";
    Usage:
      $0 [options]
    
    Options:
      -h, --help          Show this help page
      -w, --warning=NUM  ... описание ...
      ...
    __HELP__
    
    my %options = (
      # default values (if needed)
      help    => 0,
      warning => 0,
      ...
    );
    GetOptions(\%options,
      'help|'
      'warning|w=i',
      'critical|c=i',
      ...
    ) or die('invalid options, see --help');
    
    if ($options{help}) {
      print $help;
      exit 0;
    }
    

Исходная версия KennyMinigun, :

  • Закрывай файловые дескрипторы (close)
  • Выдели парсинг отдельных (форматов) файлов в отдельные функции, тогда интерфейс станет проще
  • Запуск команд через backticks — сильно подвержен иньекциям. Посмотри в сторону IPC::Open3 или аналогов (IPC::run?)
  • Лучше не использовать sudo в скрипте, а требовать чтоб скрипт запускали с нужным EUID ($>). Иначе предоставлять конфиг для sudo вместе со скриптом.
  • Предпочитай не читать все сразу, а по линии:
    my $stdout = ...; # open3?
    while (my $line = <$stdout>) {
      chomp $line; # если надо
      ...
    }
    
  • Напиши людский help:
    my $help = <<"__HELP__";
    Usage:
      $0 [options]
    
    Options:
      -h, --help          Show this help page
      -w, --warning=NUM  ... описание ...
      ...
    __HELP__
    
    my %options = (
      # default values (if needed)
      help    => 0,
      warning => 0,
      ...
    );
    GetOptions(\%options,
      'help|'
      'warning|w=i',
      'critical|c=i',
      ...
    ) or die('invalid options, see --help');
    
    if ($options{help}) {
      print $help;
      exit 0;
    }