/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Opslag af IP adresse
Fra : F.Larsen


Dato : 15-04-01 23:36

Hej

Haves: IP adresse
Ønskes: domaine navn ...

er der ikke en enkel måde at gøre det på fra et perl program ? (noget a la
NSLookup)

--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/



 
 
Adam Sjøgren (15-04-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 15-04-01 23:46

On Mon, 16 Apr 2001 00:36:15 +0200, F Larsen wrote:

> Hej Haves: IP adresse Ønskes: domaine navn ...

> er der ikke en enkel måde at gøre det på fra et perl program ?
> (noget a la NSLookup)

perldoc -f gethostbyaddr

Kort eksempel:

virgil$ perl -MSocket -e '$ia = inet_aton("193.88.13.222"); print gethostbyaddr($ia, AF_INET) . "\n";'
ofe6.inet.tele.dk
virgil$

Hvis det skal ku' mere er Net::DNS måske værd at kigge på?


Mvh.

--
"Big George: What's a philistine? Adam Sjøgren
Sally: Well, it's just a real dirty person." asjo@koldfront.dk

F.Larsen (16-04-2001)
Kommentar
Fra : F.Larsen


Dato : 16-04-01 00:04

Tak for det hurtige svar ... lige hvad jeg skulle bruge

--
Flemming

"Adam Sjøgren" <asjo@koldfront.dk> wrote in message
news:8766g5234l.fsf@virgil.koldfront.dk...
> Kort eksempel:
>
> virgil$ perl -MSocket -e '$ia = inet_aton("193.88.13.222"); print
gethostbyaddr($ia, AF_INET) . "\n";'
> ofe6.inet.tele.dk
> virgil$



Thomas Jespersen (16-04-2001)
Kommentar
Fra : Thomas Jespersen


Dato : 16-04-01 01:35

"F.Larsen" <N0Spam@usa.net> writes:

> Hej
>
> Haves: IP adresse
> Ønskes: domaine navn ...
>
> er der ikke en enkel måde at gøre det på fra et perl program ? (noget a la
> NSLookup)

perldoc -f gethostbyaddr
den anden vej:
perldoc -f gethostbyname

Ask Bjoern Hansen (16-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 16-04-01 21:22

"F.Larsen" <N0Spam@usa.net> writes:

> Haves: IP adresse
> Ønskes: domaine navn ...
>
> er der ikke en enkel måde at gøre det på fra et perl program ? (noget a la
> NSLookup)

noget i stil med:

use Socket;

sub ip2name {
my $ip = shift;
my $hostname = gethostbyaddr(gethostbyname($ip), AF_INET);
$hostname ? $hostname : $ip;
}

skulle goere det.

Eller (med timeout):

use Socket;
my $timeout = 3;

sub ip2name {
my $ip = shift;
my $hostname;
eval {
alarm($timeout);
$hostname = gethostbyaddr(gethostbyname($ip), AF_INET);
alarm(0);
};
$hostname ? $hostname : $ip;
}


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

F.Larsen (16-04-2001)
Kommentar
Fra : F.Larsen


Dato : 16-04-01 22:02

jeg ser du bruger "shift" i subben. hvornår er det en fordel ? - jeg plejer at
bruge $_[0];.-.-..?

--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/

"Ask Bjoern Hansen" <ask@netcetera.dk> wrote in message
news:m38zl0vbmg.fsf@tmtowtdi.perl.org...
>
> sub ip2name {
> my $ip = shift;



Peter Makholm (17-04-2001)
Kommentar
Fra : Peter Makholm


Dato : 17-04-01 08:46

"F.Larsen" <N0Spam@usa.net> writes:

> jeg ser du bruger "shift" i subben. hvornår er det en fordel ? - jeg plejer at
> bruge $_[0];.-.-..?

Det er den kanoniske måde at kode perl på. Det giver lettere læsligt
kode ikke hele tiden at skulle henvise til $_[42], men istedet henvise
til $arrayindex (eller hvordan man nu er opdraget til at lave
variabelnavne).

En række funktioner har også sidevirkninger, der kan påvirke @_, hvis
du ikke passer på og så går dit script pludselig istykker på en måde,
der meget let kan være umulig at debugge.

--
hash-bang-slash-bin-slash-bash

Lars Balker Rasmusse~ (17-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 17-04-01 08:57

Peter Makholm <peter@makholm.net> writes:
> "F.Larsen" <N0Spam@usa.net> writes:
> > jeg ser du bruger "shift" i subben. hvornår er det en fordel ? - jeg plejer at
> > bruge $_[0];.-.-..?
>
> Det er den kanoniske måde at kode perl på.

Tjahbumbum.

sub foo {
my ($arg1, $arg2, $arg3) = @_;
}

er vel mere kanonisk (og læsevenligt) end

sub foo {
my $arg1 = shift;
my $arg2 = shift;
my $arg3 = shift;
}

og man kan så diskutere hvorfor (eller hvorvidt) tilfældet med kun ét
argument skal særbehandles.
--
Lars Balker Rasmussen "Woo hoo!?"

Peter Makholm (17-04-2001)
Kommentar
Fra : Peter Makholm


Dato : 17-04-01 09:01

Lars Balker Rasmussen <lars@balker.org> writes:

> Tjahbumbum.

Hvad har du ikke andet at lave, end at stille mig i et dårligt lys.

--
hash-bang-slash-bin-slash-bash

Lars Balker Rasmusse~ (17-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 17-04-01 12:42

Peter Makholm <peter@makholm.net> writes:
> Hvad har du ikke andet at lave, end at stille mig i et dårligt lys.

Joda, men man skal jo tage sig tid til sin hobby
--
Lars Balker Rasmussen "Special is bad."

Peter Søgaard (17-04-2001)
Kommentar
Fra : Peter Søgaard


Dato : 17-04-01 14:03


"Lars Balker Rasmussen" <lars@balker.org> skrev i en meddelelse
news:0fzodfhhx8.fsf@humulus.daimi.au.dk...
> Peter Makholm <peter@makholm.net> writes:
> > Hvad har du ikke andet at lave, end at stille mig i et dårligt lys.
>
> Joda, men man skal jo tage sig tid til sin hobby

> --
> Lars Balker Rasmussen "Special is bad."



Thorbjoern Ravn Ande~ (17-04-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 17-04-01 15:50

On 17 Apr 2001, Lars Balker Rasmussen wrote:

> Peter Makholm <peter@makholm.net> writes:
> > "F.Larsen" <N0Spam@usa.net> writes:
> > > jeg ser du bruger "shift" i subben. hvornår er det en fordel ? - jeg plejer at
> > > bruge $_[0];.-.-..?
> >
> > Det er den kanoniske måde at kode perl på.
>
> Tjahbumbum.
>
> sub foo {
> my ($arg1, $arg2, $arg3) = @_;
> }
>
> er vel mere kanonisk (og læsevenligt) end
>
> sub foo {
> my $arg1 = shift;
> my $arg2 = shift;
> my $arg3 = shift;
> }

my ($a,$b,$c) = (shift, shift, shift).

Tjuhej hvor det går.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk


Lars Balker Rasmusse~ (17-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 17-04-01 16:01

Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> my ($a,$b,$c) = (shift, shift, shift).
>
> Tjuhej hvor det går.

I'm afraid I'm going to have to hurt you now.
--
Lars Balker Rasmussen "Special is bad."

Thorbjoern Ravn Ande~ (17-04-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 17-04-01 16:11

On 17 Apr 2001, Lars Balker Rasmussen wrote:

> Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> > my ($a,$b,$c) = (shift, shift, shift).
> >
> > Tjuhej hvor det går.
>
> I'm afraid I'm going to have to hurt you now.

There is more than one way to do it.

Man lærer en del af at se andres kode.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk


Lars Balker Rasmusse~ (17-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 17-04-01 19:01

Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> On 17 Apr 2001, Lars Balker Rasmussen wrote:
> > Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> > > my ($a,$b,$c) = (shift, shift, shift).
> >
> > I'm afraid I'm going to have to hurt you now.
>
> There is more than one way to do it.
>
> Man lærer en del af at se andres kode.

Men oftest kun unoder. TMTOWTDI burde naturligvis ikke gælde for ting
der er kanoniske...
--
Lars Balker Rasmussen "Woo hoo!?"

Thorbjørn Ravn Ander~ (18-04-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 18-04-01 07:31

Lars Balker Rasmussen wrote:

> Men oftest kun unoder. TMTOWTDI burde naturligvis ikke gælde for ting
> der er kanoniske...

Og hvorfor er den ene metode så mere kanonisk end den anden?

--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Lars Balker Rasmusse~ (18-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 18-04-01 08:50

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:
> Lars Balker Rasmussen wrote:
> > Men oftest kun unoder. TMTOWTDI burde naturligvis ikke gælde for ting
> > der er kanoniske...
>
> Og hvorfor er den ene metode så mere kanonisk end den anden?

Hvis vi accepterer kanonisk som det der bruges i dokumentationen, er

my $foo = shift;
my ($foo) = @_;

lige kanoniske, men ikke mindst er

my ($foo, $bar) = @_;

EKSTREMT meget mere kanonisk end

my ($foo, $bar) = (shift, shift);

hvorfor den første shift-eksempel naturligvis har den ulempe at man skal
skrive mere om, hvis man beslutter sig for at give funktionen et
argument mere.
--
Lars Balker Rasmussen "Special is bad."

Thorbjoern Ravn Ande~ (18-04-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 18-04-01 10:14

On 18 Apr 2001, Lars Balker Rasmussen wrote:

> > Og hvorfor er den ene metode så mere kanonisk end den anden?
>
> Hvis vi accepterer kanonisk som det der bruges i dokumentationen, er

For nu lige at lege djævlens advokat så står der da ikke noget om at man
ikke må bruge andre måder. Som jeg ser det, betyder det bare at du
accepterer Tom Christiansens programmeringsstil

perldoc perlstyle siger ikke noget om det, så man er helt på herrens mark.

> lige kanoniske, men ikke mindst er
>
> my ($foo, $bar) = @_;
>
> EKSTREMT meget mere kanonisk end
>
> my ($foo, $bar) = (shift, shift);

Ud fra antallet af tilfælde hvor stilen bruges?

> hvorfor den første shift-eksempel naturligvis har den ulempe at man skal
> skrive mere om, hvis man beslutter sig for at give funktionen et
> argument mere.

Kiggede lidt på om Perl har en måde at - som standard - checke argumenter
til en subrutine. Det har den ikke. Ikke meget hjælp dér.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk


Lars Balker Rasmusse~ (18-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 18-04-01 10:38

Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> For nu lige at lege djævlens advokat så står der da ikke noget om at man
> ikke må bruge andre måder. Som jeg ser det, betyder det bare at du
> accepterer Tom Christiansens programmeringsstil

Mest Larry Walls :)

> > my ($foo, $bar) = (shift, shift);
>
> Ud fra antallet af tilfælde hvor stilen bruges?

Ud fra betragtningen om at de eneste steder i dokumentationen shift står
to gange på en linie er

perlfaq7:

=head2 What's a closure?

Closures are documented in L<perlref>.
[...]
Here's a classic function-generating function:

sub add_function_generator {
return sub { shift + shift };
}

$add_sub = add_function_generator();
$sum = $add_sub->(4,5); # $sum is 9 now.

perltrap:

=item * Precedence

LHS vs. RHS of any assignment operator. LHS is evaluated first
in perl4, second in perl5; this can affect the relationship
between side-effects in sub-expressions.

@arr = ( 'left', 'right' );
$a{shift @arr} = shift @arr;
print join( ' ', keys %a );

# perl4 prints: left
# perl5 prints: right


Næppe eksempler der etablerer kanon.
--
Lars Balker Rasmussen "Special is bad."

Thorbjoern Ravn Ande~ (18-04-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 18-04-01 12:43

On 18 Apr 2001, Lars Balker Rasmussen wrote:

> Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> > For nu lige at lege djævlens advokat så står der da ikke noget om at man
> > ikke må bruge andre måder. Som jeg ser det, betyder det bare at du
> > accepterer Tom Christiansens programmeringsstil
>
> Mest Larry Walls :)

Jeg har en fornemmelse af at det er Tom og ikke Larry som har skrevet
hovedparten af dokumentationen. Men jeg véd det ikke.

> Ud fra betragtningen om at de eneste steder i dokumentationen shift står
> to gange på en linie er

Så må vi vel til at skrive noget mere dokumentation. Nu hvor du er i
gang, kan du så ikke også lige checke standardmodulerne til Perl? Og se
om det ændrer sig gennem versionerne?

> Næppe eksempler der etablerer kanon.

Jeg er selv efterhånden ved at være overbevist om at en af de vigtigste
ting man kan gøre som programmør for at hjælpe andre med at læse ens kode
er at benytte faste mønstre som altid betyder det samme, således at man
umiddelbart kan forstå hvad der foregår.

Standardeksemplet er (fra Java, sorry)

   for( int i=0; i < 10; i++)

som _altid_ bør være netop sådan her. En løkke fra 0 til 9 (med 10
gennemløb).

I perl er der sikkert nogen tilsvarende, men det har jeg endnu ikke fået
nok på plads til at kunne udtale mig definitivt om.

Du ved, "special is bad".

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk


Lars Balker Rasmusse~ (18-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 18-04-01 16:47

Thorbjoern Ravn Andersen <ravn@unixsnedkeren.dk> writes:
> On 18 Apr 2001, Lars Balker Rasmussen wrote:
> > Mest Larry Walls :)
>
> Jeg har en fornemmelse af at det er Tom og ikke Larry som har skrevet
> hovedparten af dokumentationen. Men jeg véd det ikke.

Jo, men Tom har baseret sin stil på Larrys. Vist nok.

> Så må vi vel til at skrive noget mere dokumentation. Nu hvor du er i
> gang, kan du så ikke også lige checke standardmodulerne til Perl? Og se
> om det ændrer sig gennem versionerne?

Jo, hvis jeg engang ikke kan finde på andet at lave :)

> Jeg er selv efterhånden ved at være overbevist om at en af de vigtigste
> ting man kan gøre som programmør for at hjælpe andre med at læse ens kode
> er at benytte faste mønstre som altid betyder det samme, således at man
> umiddelbart kan forstå hvad der foregår.

Nemli!

> Standardeksemplet er (fra Java, sorry)
>
>    for( int i=0; i < 10; i++)
>
> som _altid_ bør være netop sådan her. En løkke fra 0 til 9 (med 10
> gennemløb).

int i;
for (i = 0; i < 10; ++i) { /* C */

for (int i = 0; i < 10; ++i) { // C++

for (int i = 0; i < 10; ++i) { // Java

for (my $i = 0; $i < 10; ++$i) { # perl

Sådan vil jeg skrive det i alle lignende sprog. Bemærk whitespace, og
prefix operator når man ikke bruger sideeffekten.

> I perl er der sikkert nogen tilsvarende, men det har jeg endnu ikke fået
> nok på plads til at kunne udtale mig definitivt om.

foreach my $i (0..9) { # er vist nemmest og klart nok

for (0..9) { # til oneliners, men ikke rigtige programmer :)

> Du ved, "special is bad".

Altid!
--
Lars Balker Rasmussen "Woo hoo!?"

Adam Sjøgren (18-04-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 18-04-01 13:32

On Wed, 18 Apr 2001 11:14:00 +0200, Thorbjoern Ravn Andersen wrote:

> Kiggede lidt på om Perl har en måde at - som standard - checke
> argumenter til en subrutine. Det har den ikke. Ikke meget hjælp
> dér.

"Prototypes" (perldoc perlsub) er vist det tætteste på man kommer?

virgil$ perl -e '$a=1; $b=2; $c=3; sub p($$) {}; p($a);'
Not enough arguments for main::p at -e line 1, near "$a)"
Execution of -e aborted due to compilation errors.
virgil$ perl -e '$a=1; $b=2; $c=3; sub p($$) {}; p($a,$b);'
virgil$ perl -e '$a=1; $b=2; $c=3; sub p($$) {}; p($a,$b,$c);'
Too many arguments for main::p at -e line 1, near "$c)"
Execution of -e aborted due to compilation errors.
virgil$


Mvh.

--
"The Commodore 64. Under $600. Adam Sjøgren
You can't buy a better computer at twice the price." asjo@koldfront.dk

Ask Bjoern Hansen (19-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 19-04-01 21:30

asjo@koldfront.dk (Adam Sjøgren) writes:

> > Kiggede lidt på om Perl har en måde at - som standard - checke
> > argumenter til en subrutine. Det har den ikke. Ikke meget hjælp
> > dér.
>
> "Prototypes" (perldoc perlsub) er vist det tætteste på man kommer?

Prototypes i Perl er noget andet end prototypes i C.

http://www.perl.com/pub/language/misc/fmproto.html

--
ask bjoern hansen - http://ask.netcetera.dk/

Adam Sjøgren (19-04-2001)
Kommentar
Fra : Adam Sjøgren


Dato : 19-04-01 22:19

On 19 Apr 2001 13:29:44 -0700, Ask Bjoern Hansen wrote:

>>> Kiggede lidt på om Perl har en måde at - som standard - checke
>>> argumenter til en subrutine. Det har den ikke. Ikke meget hjælp
>>> dér.

>> "Prototypes" (perldoc perlsub) er vist det tætteste på man kommer?

> Prototypes i Perl er noget andet end prototypes i C.

Mmmh - du har ret. Jeg læste ikke læste grundigt nok før jeg svarede &
det var helt forkert.

Til gengæld prøvede jeg at dække mig ind med "det tætteste på" ...

Nå, men når bare man lærer af fejltagelser... jeg udvælger et par
citater fra <http://www.perl.com/pub/language/misc/fmproto.html>
(tak!) og kravler ned under en sten et stykke tid:

"As you see, here as in so many other areas, Perl's ``prototypes''
work out well when they are used for what they were designed to
do--that is, to emulate built-in functions by allowing calls to a
user-defined subroutine to be subject to the same implicit parameter
context conversions as built-ins are."

Og:

"This isn't what could even charitably be referred to as error
checking. This is implicit casting between incompatible types."



Samt:

"So, have Perl's ``prototypes'' worked out ok? If the goal is to
provide something like what other languages call prototypes,
something to let the compiler catch errors of type and number
occurring in calls to subroutines, then the answer is certainly
that they have not.

Of course, you could try to argue that that's not a fair question,
since ``prototypes'' were really supposed to be context coercion
templates, something to let you emulate a built-in function. This
dodges the fact that Perl's ``prototypes'' violate the principle of
least surprise, but so be it."


Mvh.

--
"Make them think upgrading was their own idea. Adam Sjøgren
That often helps." asjo@koldfront.dk

Ask Bjoern Hansen (19-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 19-04-01 21:41

Lars Balker Rasmussen <lars@balker.org> writes:

> Tjahbumbum.
>
> sub foo {
> my ($arg1, $arg2, $arg3) = @_;
> }
>
> er vel mere kanonisk (og læsevenligt) end
>
> sub foo {
> my $arg1 = shift;
> my $arg2 = shift;
> my $arg3 = shift;
> }

Jeg syntes $arg1 = shift er mere laesevenligt end ($arg1) = @_.

I den foerste udgave kan det bare laeses, i den anden skal jeg tage
stilling til at vi flytter rundt med lister for bare at opdage at vi
kun bruger eet element.

Men som en eller anden naevnte kommer det i hoej grad an paa om man
vil beholde @_ eller ej. Ofte bruger jeg shift til at tage visse
parametre ud for senere bare at kunne bruge @_.

En variant over det som jeg ofte bruger er,

my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};

til funkioner ala en system() wrapper hvor det primaere er bare at
smide en liste med parametre ind, men hvor det er rart at have
mulighed for at give nogle options.

for eksempel

use strict;
use Carp;

sub run {
my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};
print "Running: ", join(" ",@_), "\n" unless $parms->{silent};
return 1 if system (@_) == 0;
my $exit_value = $? >> 8;
return 0 if $parms->{fail_silent_if}
&& $exit_value == $parms->{fail_silent_if};
my $msg = "system @_ failed: $exit_value ($?)";
croak $msg unless $parms->{failok};
print "$msg\n";
return 0;
}

# koer /usr/bin/katut tit tot
run "/usr/bin/katut", "tit", "tot";

# koer /usr/local/bin/kaput --ok nope uden at doe hvis det ikke virker
run "/usr/local/bin/kaput", "--ok" => "nope", { failok => 1 };


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

F.Larsen (19-04-2001)
Kommentar
Fra : F.Larsen


Dato : 19-04-01 21:50

"Ask Bjoern Hansen" <ask@netcetera.dk> wrote in message
news:m37l0gpqqb.fsf@tmtowtdi.perl.org...
>
> Jeg syntes $arg1 = shift er mere laesevenligt end ($arg1) = @_.

jeg anvender konsekvent følgende metode til tildeling af sub argumenter:

sub yellow
{
$strName = @_[0];
$intAlder = @_[1];
}

primært fordi jeg syntes det er nemt og overskueligt, men også fordi det læner sig
op af den programnmerings stil som jeg iøvrigt benytter (som gammel C programmør
;=)

--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/



Ask Bjoern Hansen (20-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 20-04-01 05:01

"F.Larsen" <N0Spam@usa.net> writes:

> > Jeg syntes $arg1 = shift er mere laesevenligt end ($arg1) = @_.
>
> jeg anvender konsekvent følgende metode til tildeling af sub argumenter:
>
> sub yellow
> {
> $strName = @_[0];
> $intAlder = @_[1];
> }
>
> primært fordi jeg syntes det er nemt og overskueligt, men også fordi det læner sig
> op af den programnmerings stil som jeg iøvrigt benytter (som gammel C programmør
> ;=)

Du kan i det mindste goere det lidt mere korrekt ved at bruge $_[0] og
$_[1].

@_[0] er en "slice" fra listen @_.
$_[0] er den foerste scalar i listen @_.




- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

F.Larsen (20-04-2001)
Kommentar
Fra : F.Larsen


Dato : 20-04-01 20:15

"Ask Bjoern Hansen" <ask@netcetera.dk> wrote in message
news:m3ae5c8bk2.fsf@tmtowtdi.perl.org...
> "F.Larsen" <N0Spam@usa.net> writes:
>
>
> Du kan i det mindste goere det lidt mere korrekt ved at bruge $_[0] og
> $_[1].

hmm, jow, der skulle selvfølgelig stå $ og ikke @ ;=)
Men min pointe var mere at gøre det enkelt og gennemskueligt - men det er jo nok i
virkeligheden også ret subjektivt ...

--
Flemming

Q2 3D Benchmarks: http://www.ClanWorld.dk/Q2Bench/
Støjdæmp din PC ..: http://hjem.get2net.dk/Quake2/LowNoise/



Thorbjørn Ravn Ander~ (19-04-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 19-04-01 21:59

Ask Bjoern Hansen wrote:

> sub run {
> my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};
> print "Running: ", join(" ",@_), "\n" unless $parms->{silent};
> return 1 if system (@_) == 0;
> my $exit_value = $? >> 8;
> return 0 if $parms->{fail_silent_if}
> && $exit_value == $parms->{fail_silent_if};
> my $msg = "system @_ failed: $exit_value ($?)";
> croak $msg unless $parms->{failok};
> print "$msg\n";
> return 0;
> }

Uha. Andre menneskers kode...

Du ville gøre mig, og formentlig også andre, en tjeneste ved at putte
nogen fornuftige kommentarer i. Ovenstående synes jeg ikke giver fuld
mening ved første gennemlæsning, men nu har jeg heller ikke lavet lige
så meget Perl som dig.

Specielt noget med returværdier og hvilke omstændigheder de kan
forventes i, var nok noget man ville værdsætte

--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Lars Balker Rasmusse~ (19-04-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 19-04-01 22:03

Ask Bjoern Hansen <ask@netcetera.dk> writes:
> Jeg syntes $arg1 = shift er mere laesevenligt end ($arg1) = @_.
>
> I den foerste udgave kan det bare laeses, i den anden skal jeg tage
> stilling til at vi flytter rundt med lister for bare at opdage at vi
> kun bruger eet element.

Tjah. Jeg læser ikke

sub foo {
my ($arg1) = @_;

men genkender en funktion foo der tager et argument.

> my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};

Den der skal man til gengæld læse et par gange :)
--
Lars Balker Rasmussen "Woo hoo!?"

Ask Bjoern Hansen (20-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 20-04-01 05:11

Lars Balker Rasmussen <lars@balker.org> writes:

> > my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};
>
> Den der skal man til gengæld læse et par gange :)

Den er da simpel nok hvis man bare er vant til at bruge "?:" (kig
efter "conditional operator" i perlop.pod).

Det er min favorit maade at tilfoeje options til en funktion som
normalt bare tager en liste parametre og ofte ikke behoever
options. Eller tilfoeje options til produktions kode med parametre der
ikke var alt for gennemtaenkt til at starte med.

Thorbjoern, jeg vil lave en kommenteret udgave senere. Skal ud af
doeren ellers er der en som sikkert ikke vil tale til mig i laengere
end jeg bryder mig om. (og jeg vil falde om af sult).


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

Thorbjørn Ravn Ander~ (20-04-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 20-04-01 18:34

Ask Bjoern Hansen wrote:
>
> Lars Balker Rasmussen <lars@balker.org> writes:
>
> > > my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};
> >
> > Den der skal man til gengæld læse et par gange :)
>
> Den er da simpel nok hvis man bare er vant til at bruge "?:" (kig
> efter "conditional operator" i perlop.pod).

Pudsigt. Lige præcis "?:"-operatoren er den jeg fremhæver som værende
_SLEM_ når jeg forklarer Java for folk som ikke kender det. Det er og
bliver en grim, grim "if" som er svær at læse.

> Thorbjoern, jeg vil lave en kommenteret udgave senere. Skal ud af
> doeren ellers er der en som sikkert ikke vil tale til mig i laengere
> end jeg bryder mig om. (og jeg vil falde om af sult).

Jeg forstod den skam godt efter at kigge lidt på den, så det behøver du
ikke for min skyld. Min pointe var at du nok kunne lette det for andre
men skam også dig selv når du kigger på det igen senere. Hvis ikke, så
burde du måske bruge mere tid hos hende kokken og mindre tid andre
steder

--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Lasse Hillerøe Peter~ (20-04-2001)
Kommentar
Fra : Lasse Hillerøe Peter~


Dato : 20-04-01 21:30

In article <3AE07305.A3B25383@bigfoot.com>, =?iso-8859-1?Q?Thorbj=F8rn?=
Ravn Andersen <thunderbear@bigfoot.com> wrote:

>Ask Bjoern Hansen wrote:
>>
>> Lars Balker Rasmussen <lars@balker.org> writes:
>>
>> > > my $parms = ref $_[-1] eq "HASH" ? pop @_ : {};
>> >
>> > Den der skal man til gengæld læse et par gange :)
>>
>> Den er da simpel nok hvis man bare er vant til at bruge "?:" (kig
>> efter "conditional operator" i perlop.pod).
>
>Pudsigt. Lige præcis "?:"-operatoren er den jeg fremhæver som værende
>_SLEM_ når jeg forklarer Java for folk som ikke kender det. Det er og
>bliver en grim, grim "if" som er svær at læse.

Vrøvl, udtryks-if er smukke!

Så vil du ikke elske denne her:

sub f { my($x,$y)=@_;
1 while ${$x>$y?\$x:\$y} -= ($x<$y?$x:$y);
return $x;
}

Eller C udgaven (den smukkeste, IMØ):

f(x,y) { while(*(x>y?&x:&y) -= x<y?x:y); return x;}

Eller Algol68 udgaven:

int proc f(int x,y): (while ((x>y|x|y) -:= (x<y|x|y)) >0 do od; x)

(Er der nogen der har set dette før?)

-Lasse

Lasse Hillerøe Peter~ (20-04-2001)
Kommentar
Fra : Lasse Hillerøe Peter~


Dato : 20-04-01 21:51

In article <lhp+news-2004012230020001@globemaster.toft-hp.dk>,
lhp+news@toft-hp.dk (Lasse Hillerøe Petersen) wrote:

>int proc f(int x,y): (while ((x>y|x|y) -:= (x<y|x|y)) >0 do od; x)

Pinligt. Det skulle selvfølgelig have været:
int proc f(int a,b):
(int x=a; int y=b;while ((x>y|x|y) -:= (x<y|x|y)) >0 do od; x)

(Jeg skal lige vænne mig til Algol68 refs. Men der var nok ikke nogen der
havde opdaget fejlen alligevel?)

-Lasse

Thorbjørn Ravn Ander~ (21-04-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 21-04-01 00:25

"Lasse Hillerøe Petersen" wrote:

> Så vil du ikke elske denne her:

Næh. Hvorfor skal $x have en \ foran?

Ellers ligner det Euklids algoritme.

> sub f { my($x,$y)=@_;
> 1 while ${$x>$y?\$x:\$y} -= ($x<$y?$x:$y);
> return $x;
> }

Jeg lurepasser lige...

--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Lasse Hillerøe Peter~ (21-04-2001)
Kommentar
Fra : Lasse Hillerøe Peter~


Dato : 21-04-01 07:15

In article <3AE0C54B.CB010523@bigfoot.com>, =?iso-8859-1?Q?Thorbj=F8rn?=
Ravn Andersen <thunderbear@bigfoot.com> wrote:

>Næh. Hvorfor skal $x have en \ foran?

Fordi jeg bare oversatte C-versionen direkte uden at tænke.

-Lasse

Ask Bjoern Hansen (22-04-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 22-04-01 04:33

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> > Så vil du ikke elske denne her:
>
> Næh. Hvorfor skal $x have en \ foran?

Fordi hele dimsen bliver dereferencieret (eller hvad heddet det paa
dansk?) af ${ } halloejet rundt om.


- ask

> Ellers ligner det Euklids algoritme.
>
> > sub f { my($x,$y)=@_;
> > 1 while ${$x>$y?\$x:\$y} -= ($x<$y?$x:$y);


- ask

--
ask bjoern hansen - http://ask.netcetera.dk/

Thorbjoern Ravn Ande~ (17-04-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 17-04-01 15:50

On 17 Apr 2001, Peter Makholm wrote:

> "F.Larsen" <N0Spam@usa.net> writes:
>
> > jeg ser du bruger "shift" i subben. hvornår er det en fordel ? - jeg plejer at
> > bruge $_[0];.-.-..?
>
> Det er den kanoniske måde at kode perl på. Det giver lettere læsligt
> kode ikke hele tiden at skulle henvise til $_[42], men istedet henvise
> til $arrayindex (eller hvordan man nu er opdraget til at lave
> variabelnavne).

Der er en ting som er meget vigtig her, nemlig at "shift" ændrer på
værdien af @_. Ved at lave en my( $a, $b) = @_ i stedet har man fordelen
(hvis altså man benytter @_ senere) at @_ er konstant over hele
funktionen, og at man dokumenterer hvad man forventer i de enkelte pladser
i @_.

Men det er smag og behag. Min erfaring med andres kode, er at variable
der ændrer værdi er meget sværere at holde styr på end variable som ikke
gør.

Mvh,
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk


Trond Michelsen (19-04-2001)
Kommentar
Fra : Trond Michelsen


Dato : 19-04-01 08:45

> Der er en ting som er meget vigtig her, nemlig at "shift" ændrer på
> værdien af @_. Ved at lave en my( $a, $b) = @_ i stedet har man
fordelen
> (hvis altså man benytter @_ senere) at @_ er konstant over hele
> funktionen, og at man dokumenterer hvad man forventer i de enkelte
pladser
> i @_.
>
> Men det er smag og behag. Min erfaring med andres kode, er at
variable
> der ændrer værdi er meget sværere at holde styr på end variable som
ikke
> gør.

Husk at når du skriver klasse- og objekt-metoder, så ønsker man gjerne å
endre verdien av @_

my $obj = new Min::Modul (@args);
eller
my $obj = Min::Modul->new(@args);

Begge disse vil kalle funksjonen slik:
my $obj = Min::Modul::new("Min::Modul", @args);

derfor er det vanlig å skrive funksjonen slik:

sub new {
my $self = shift;
my @args = @_;
[...]
}

--
Trond Michelsen




Thorbjoern Ravn Ande~ (19-04-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 19-04-01 11:40

On Thu, 19 Apr 2001, Trond Michelsen wrote:

> Husk at når du skriver klasse- og objekt-metoder, så ønsker man gjerne å
> endre verdien av @_
>
> my $obj = new Min::Modul (@args);
> eller
> my $obj = Min::Modul->new(@args);
>
> Begge disse vil kalle funksjonen slik:
> my $obj = Min::Modul::new("Min::Modul", @args);
>
> derfor er det vanlig å skrive funksjonen slik:
>
> sub new {
> my $self = shift;
> my @args = @_;
> [...]
> }

Lige præcis dette her, er efter min mening et hack som lapper på at
OOP-implementeringen ikke er indbygget særlig godt i selve perl (altså at
$self eller $this burde blive sat automatisk, som i andre sprog).

@_ er først lig de argumenter man selv har givet, efter at shift er blevet
udført, og derfor giver det først mening at snakke om "konstante
værdier" herefter.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk


Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste