{"id":53,"date":"2008-07-31T14:45:00","date_gmt":"2008-07-31T14:45:00","guid":{"rendered":"http:\/\/byteblog.internetallee.de\/?p=53"},"modified":"2008-07-31T14:45:00","modified_gmt":"2008-07-31T14:45:00","slug":"wie-sage-ich-es-meiner-funktion","status":"publish","type":"post","link":"https:\/\/blogs.internetallee.de\/byteblog\/2008\/07\/31\/wie-sage-ich-es-meiner-funktion\/","title":{"rendered":"Wie sage ich es meiner Funktion"},"content":{"rendered":"<p>Ein Kollege fragte mich heute, wie man in Perl nochmal Parameter an eine Funktion \u00fcbergibt.<\/p>\n<p>Das ist ja im Prinzip ganz einfach. Eine Funktion in Perl erh\u00e4lt als \u00dcbergabeparameter eine einfache Liste mit Namen <strong>@_<\/strong>. Aber damit f\u00e4ngt es dann erst an.<\/p>\n<p>Nehmen wir mal an, wir haben eine einfache Funktion mit zwei Parametern:<\/p>\n<pre class=\"brush: perl;\">sub twoParamFunction {\n    my ($one, $two) = @_;\n    print \"$one and $twon\";\n}<\/pre>\n<p>Hier wird die Liste <strong>@_<\/strong> einer Liste mit gerade frisch deklarierten Variablen zugewiesen. Es werden also alle zus\u00e4tzlichen Parameter verworfen. Diese Art der Parameter\u00fcbergabe ist vermutlich eine der gebr\u00e4uchlichsten und einfachsten.<\/p>\n<p>Aber nat\u00fcrlich war das nicht die Art der \u00dcbergabe, die mein Kollege im Sinn hatte. Also gut, wir k\u00f6nnen auch benannte Parameter mit Standard-Werten benutzen:<\/p>\n<pre class=\"brush: perl;\">sub hashAsParam {\n    my %hash_param = ( \n        'one' =&gt; 'Eins',\n        'two' =&gt; 'Zwei',\n        @_ );\n    print \"$hash_param{one} und $hash_param{two}n\";\n}\n<\/pre>\n<p>Hier wird die Liste in eine Hashstruktur eingeblendet und so k\u00f6nnen die benannte Parameter <strong>one<\/strong> und <strong>two<\/strong> sowohl \u00fcbergeben, als auch weggelassen werden &#8211; dann erhalten sie eben ihre Standardwerte.<\/p>\n<p>Aber ach, das war es auch nicht. Nun gut, wir k\u00f6nnen beide Methoden mischen:<\/p>\n<pre class=\"brush: perl;\">sub mixedParams {\n    my ($one, $two, %optional) = @_;\n    print \"$one and $twon\";\n    print join(\"; \", keys %optional) . \"n\";\n}\n<\/pre>\n<p>Hier werden aus der Parameterlliste die ersten beiden Elemente <strong>$one<\/strong> und <strong>$two<\/strong> zugewiesen, und der Rest wird wie in <strong>hashAsParam<\/strong> einer Hashstruktur aufgehen. Wenn hierbei auch noch Standardwerte vorgegeben werden sollen, kann das in einer extra Zeile geschehen.<\/p>\n<p>Hmhm, das war es auch nicht. Ok, wir k\u00f6nnen nat\u00fcrlich auch noch die Liste einzeln abarbeiten:<\/p>\n<pre class=\"brush: perl;\">sub oneStep {\n    my $one = shift;\n    my $two = shift;\n    print \"$one and $twon\";\n}<\/pre>\n<p>Ja, genau das wars! Aber wo wir jetzt schon so viele Varianten hatten, k\u00f6nnen wir eine noch zus\u00e4tzlich anbieten:<\/p>\n<pre class=\"brush: perl;\">sub selectAFew {\n    my ($one, $four) = @_[0,3];\n    print \"$one a $fourn\";\n}<\/pre>\n<p>\u00c4h? Aber ab hier sollte eigentlich sp\u00e4testens klar sein, dass <strong>man perldata<\/strong> und <strong>man perlsyn<\/strong> mal wieder besucht werden sollten. Um den ganzen die Krone aufzusetzen, kam mein Kollege eine halbe Stunde sp\u00e4ter wieder an. Diesmal wollte er aber die M\u00f6glichkeiten der R\u00fcckgaben aus Perl-Funktionen wissen&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Kollege fragte mich heute, wie man in Perl nochmal Parameter an eine Funktion \u00fcbergibt. Das ist ja im Prinzip ganz einfach. Eine Funktion in Perl erh\u00e4lt als \u00dcbergabeparameter eine einfache Liste mit Namen @_. Aber damit f\u00e4ngt es dann erst an. Nehmen wir mal an, wir haben eine einfache Funktion mit zwei Parametern: sub [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[34,27],"class_list":["post-53","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-perl","tag-sprachen"],"_links":{"self":[{"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/posts\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/comments?post=53"}],"version-history":[{"count":0,"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/posts\/53\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/media?parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/categories?post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.internetallee.de\/byteblog\/wp-json\/wp\/v2\/tags?post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}