Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10979[/thread]

localtime timelocal

Leser: 3


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
styx-cc
 2007-12-08 12:36
#103616 #103616
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo, ich habe hier einen Quelltext, den ich vor etwa nem Jahr geschrieben habe, was er macht ist mir klar und funktionieren tut er auch. Aber ich frage mich, warum er funktioniert.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sub getDayName {
    use Time::Local;

    my $day = shift; # DD || D
    my $month = shift; # MM || M
    my $year = shift; # YYYY

    my $info = scalar( localtime( timelocal(0,0,0,$day,$month-1,$year) ) );
    my @parts = split / /, $info;
    my %days = (
                "Mon" => "Mo",
                "Tue" => "Di",
                "Wed" => "Mi",
                "Thu" => "Do",
                "Fri" => "Fr",
                "Sat" => "Sa",
                "Sun" => "So"
                );
    my $weekDay = $days{$parts[0]};
    return $weekDay;
}


Uebergeben wird ein Datum, und zurueckgegeben der dazugehoerige Wochentag.
In Zeile 8 muss ich doch eine Zahl als Wert bekommen, wegen dem Aufruf von scalar();, oder nicht?
Code: (dl )
 my $info = scalar( localtime( timelocal(0,0,0,$day,$month-1,$year) ) );

Dann frage ich mich, warum ich das in Zeile 9 splitte, und wie in Zeile 19 der Hashaufruf klappt:
Code: (dl )
my $weekDay = $days{$parts[0]};


Vielen Dank!
MfG
Pörl.
lichtkind
 2007-12-08 13:02
#103617 #103617
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
gut hattest recht aber hier trotzdem ne einfacherer version.
Code (perl): (dl )
1
2
3
4
5
6
7
8
sub getDayName {
    use Time::Local;
    my ($day, $month, $year) = @_;

    my $weekDay = ( localtime( timelocal(0,0,0,$day,$month-1,$year) ) ) [6];
    my @name = qw( So Mo Di Mi Do Fr Sa );
    return $name[$weekDay];
}

alles was du willst ist ja der wochentag. selbst wenn du die scalar form von localtime benutzt reicht es doch dir den ersten teil zu holen.

diese scalar form liefert dir ein schön formatierte datumsausgabe: Dienstag, februar 35, Zeit, Jahr. den splittest du damit den wochentag rausziehstst und den hash benutzt du um diese englische angabe auf deutsch zu übersetzen. genau das macht: my $weekDay = $days{$parts[0]}. du hast ja einen hash aufgebaut mit en. wochentagen als schlüssel und de werten. so funktioniert der hash als wörterbuch (hashes werden manchmal in python und anderswo auch so genannt)

mein ansatz geht halt den anderen weg das er sich gleich direkt nur den wochentag als zahlenwert holt (0 ist sonntag) und ihn per array übersetzt.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
bloonix
 2007-12-08 13:25
#103618 #103618
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (dl )
1
2
3
use DateTime;
my $dt = DateTime->now;
$dt->day_abbr;
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
lichtkind
 2007-12-08 13:26
#103619 #103619
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
noch ne kleinigkeit: use würde ich nicht innerhalb einer sub verwenden weil das irreführt. entweder mit require einbinden oder ausserhalb am modulanfang mit use.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
styx-cc
 2007-12-08 13:27
#103620 #103620
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Da gefaellt mir Deine Version besser.
Ich dachte das scalar() generell einen numerischen Wert zuruekliefert.
Vielen Dank

edit: steht eigentl. auch nicht in der sub, habs hier nur so herkopiert, schlechtes Vorbild *duck
Pörl.
styx-cc
 2007-12-08 13:29
#103621 #103621
User since
2006-05-20
533 Artikel
BenutzerIn

user image
bloonix: leider ist DateTime kein Coremodul
Pörl.
bloonix
 2007-12-08 13:34
#103622 #103622
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
styx-cc+2007-12-08 12:29:49--
bloonix: leider ist DateTime kein Coremodul

Code: (dl )
cpan -i DateTime

das schaffst du auch noch ;-)

Ausserdem ändert sich die Corelist permanent!
Wie möchtest du dich also auf die Corelist verlassen?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ap
 2007-12-08 13:35
#103624 #103624
User since
2007-12-08
3 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
use POSIX 'strftime';

sub get_day_name {
    my ( $day, $month, $year ) = @_;
    my $week_day = strftime '%w', 0, 0, 0, $day, $month - 1, $year;
    return ( qw( So Mo Di Mi Do Fr Sa ) )[ $week_day ];
}
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1}
&Just->another->Perl->hack;
lichtkind
 2007-12-08 13:51
#103625 #103625
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
POSIX ist zwar core aber ich verwende lieber module die für einen bestimmten zweck gemacht sind. und wenn schon minimal sein willst da kann an noch ne klammer kürzen :)

Code (perl): (dl )
return qw( So Mo Di Mi Do Fr Sa ) [ $week_day ];


daran hatte ich auch schon gedacht.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
ap
 2007-12-08 14:08
#103629 #103629
User since
2007-12-08
3 Artikel
BenutzerIn
[Homepage] [default_avatar]
Mir war nicht bewusst, dass man die Klammern da weglassen kann… so oft hatte ich das Bedürfnis noch nicht, ein bestimmtes Element einer qw-Liste zu adressieren. :-)

Was die Verwendung von spezialisierten Modulen betrifft, finde ich das kein überzeugendes Argument. Die besagte Funktion passt zu diesem Problem wie die Faust aufs Auge; dass sie Teil der Systemfunktionen ist und daher über ein Systemfunktionenmodul geladen wird, stört mich ich nicht.

Aber wenn’s dir nicht behagt:

Code (perl): (dl )
1
2
3
4
package Time::Strftime;
use POSIX 'strftime';
use Exporter;
@EXPORT = 'strftime';

;-)
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1}
&Just->another->Perl->hack;
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-12-08 12:36.