Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 22:16 27.04.24 
Компютри и Интернет
   >> Perl
*Кратък преглед

Тема 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-те променливи без условие в подпрограмата.
Лек ден!




*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.