|
Тема |
Re: subroutine help [re: ton4] |
|
Автор |
supremacy (phantom) |
|
Публикувано | 03.06.07 17:01 |
|
|
ако не те мързи погледни
perlfunc - `perldoc perlfunc` или `man perlfunc` или http://perldoc.perl.org/search.html?q=perlfunc
както и perldoc -f return
относно резултата 1-ца, който имаш: функцията (subroutine in the Perl world) ти връща това, което връща фунцията print, което от своя страна е 1-ца.
тествай през терминала следното:
>perl -e 'print print'
кофти навик е да не връщаш експлицитно от функция. или ако е имплицитно, то поне имай конкретен стил, примерно ако последния ред е без край (;) - ще значи, че се има предвид return на var, expression, но не и на print или какъвто и да е объркващ statement, както е и в твоя случай.
в твоя вариант няма нужда от изход към STDOUT, т.е. print в самата функция. IMHO следва да е нещо от сорта на:
sub _mytime {
my (@args) = @_;
# your logic here ...
return $time # or whatever is wanted
}
колкото до раздробяването на 3 отделни функции - защо не една, но с условно разклонение, което ще води до изчисляване на различни стоиности?
#!/usr/bin/perl
use strict;
use warnings;
use Fatal qw(open close);
use Time::localtime;
open my $fh, '>', '/tmp/_some_test_file.txt';
# use pack to align the result
print $fh pack('A10', "seconds:"), _mytime({second=>'true'}),$/;
print $fh pack('A10', "minutes:"), _mytime({minute=>'true'}),$/;
print $fh pack('A10', "hours:"), _mytime({hour=>'true'}),$/;
=pod=
or just:
print $fh
_mytime({hour=>'true'}),' ',
_mytime({minute=>'true'}), ' ',
_mytime({second=>'true'});
=cut=
close $fh;
sub _mytime {
my $type = shift; # hash ref with time type
my @args = @_; # the rest arguments
my $timetype = q{}; # the end result
# case when-else emulation
if ($type->{'second'}) { $timetype = localtime->sec() }
elsif ($type->{'minute'}) { $timetype = localtime->min() }
elsif ($type->{'hour'}) { $timetype = localtime->hour() }
$timetype
}
ако и това не ти помага - http://perldoc.perl.org или просто perldoc perl
|
| |
|
|
|