|
Тема
|
subroutine help
|
|
Автор | ton4 (Нерегистриран) |
Публикувано | 02.06.07 23:44 |
|
Здравейте
Въпроса ми ще ви се стори елементарен, но сега започвам с Пърл и ми е малко трудно. Опитвам се да разбера как да извадя различни стойности от една и съща подпрограма:
sub TIME
{
@months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
$year = 1900 + $yearOffset;
$theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
print $hour;
print $second;
print $minute;
}
Искам да изкарам вън $hour, $second и $minute
понеже нямам много време и реших да го направя като направя 3 еквивалентни подпрограми за времето, но всяка от тях да връща по отделно
$hour $second $minute ; като естествено ги кръстих различно и после ги извикавах поотделно в основната програма (знам че е малко хамалско). Всичко си беше добре докато не се опитах да вкарам във print върнатата от подпрограмата стойност :
$minutte= minute ();
print FH1 $minutte ; #otpe4atva go vyv failow manipolator
та значи това върви ОБАЧЕ после като отворя фаила след стойността за минутата, която е взета от съответната подпрограма, се появява една мистериозна 1-ца ?!
Ако някой ми каже как да го направя по-интелигентно ще съм много благодарен :)
х10
| |
Тема
|
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
| |
Тема
|
utochnenie
[re: ton4]
|
|
Автор | usb2 (Нерегистриран) |
Публикувано | 21.05.08 17:05 |
|
Здравейте,
и аз наскоро срещнах подобен проблем, а именно как да върна 3 стойности
от подпрограма. Направих го така но според мен има по интелигентен начин?
#! /usr/bin/perl -w
use POSIX qw(strftime);
&sub_test;
print $back[0] . "\n";
print $back[1] . "\n";
print $back[2] . "\n";
exit(0);
sub sub_test
{
$clock_in = strftime "%H%M%S", localtime;
$back[0] = substr($clock_in, 0, 2); # current_hour
$back[1] = substr($clock_in, 2, 2); # $current_minute
$back[2] = substr($clock_in, 4, 2); # $current_second
}
т.е. искам да върна и 3-те променливи без условие в подпрограмата.
Лек ден!
| |
|
|
|
|