2016-02-15 9 views
0

У меня есть подмодуль perl, который имеет 3 параметра: $ text, $ color, $ font
Из этих параметров шрифт $ color и $ необязателен.Perl несколько необязательных параметров

Если мне нужно передать только $ font без $ color, как это сделать, поскольку perl назначит строку шрифта цвету $, когда используется shift.

ответ

6

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

sub myfunction { 
    my %options = @_; 
    my ($text, $color, $font) = @options{qw(text color font)}; 
    ... 
} 

тогда вы называете это так:

myfunction(font => 'font goes here', text => "Here's the text") # no color 
+0

Есть ли другой способ без использования хешей? – user5485904

+5

@ user5485904 'foo ('bar', undef, 'baz')' –

+2

@ user5485904, почему бы вам не использовать хэши? Написание скрипта Perl без хешей - это как писать роман без буквы «E». – mscha

0

вы можете использовать модуль Getopt.

use Getopt::Long; 

#make options 
my $text; 
my $color; 
my $font; 

GetOptions('-text=s' => $text, '-color=s' => $color, '-font=s' => $font,); 

unless ($text){ 
    die "No text arg provided"; 
} 

#do something 
+2

Я уверен, что речь идет о передаче параметров в вызов функции ('sub'), а не о принятии параметров командной строки. –

+0

Да, передавая параметры для работы. – user5485904

Смежные вопросы