hotti: Reihenfolge keys %hash

h1,

unter der Voraussetzung, dass ein hash im Lauf des Scripts unverändert bleibt, Frage: ist die Reihenfolge bei einem mehrmaligen Schleifendurchlauf

foreach my $k(keys %hash){}

immer dieselbe???

Viele Grüße,
Horst Haschisch

--
So ein Schweinehase: Legt Eier!
  1. unter der Voraussetzung, dass ein hash im Lauf des Scripts unverändert bleibt, Frage: ist die Reihenfolge bei einem mehrmaligen Schleifendurchlauf foreach my $k(keys %hash){}immer dieselbe???

    Konkret kann und würde ich vermuten, dass dem so ist. Fast sicher bin mir aber, dass der Algorithmus, der hierauf setzt, nunja, suboptimal ist.

    Für den Fall, dass ich es dennoch so machen wollte, würde ich eine Sortierung in verwenden:
    my $k(sort keys %hash){}

    Off-Topic:
    Eine Antwort auf
    erkläre jetzt bitte mal genau, was du mit deiner Behauptung, Google könnte Seiteninhalte auslesen, die per HTTP Auth geschützt sind, meinst.
    würde mich weiterhin sehr interessieren!

    1. h1,

      my $k(sort keys %hash){}

      Ok, danke!

      Off-Topic:
      Eine Antwort auf
      erkläre jetzt bitte mal genau, was du mit deiner Behauptung, Google könnte Seiteninhalte auslesen, die per HTTP Auth geschützt sind, meinst.
      würde mich weiterhin sehr interessieren!

      Gerne: Ich habe festgestellt, dass google auch solche Seiten in den Index nimmt. Meinen Hinweis, dass die Webmastertools von google sehr hilfreich sind, gebe ich auch gerne nochmal weiter, da ist jedoch eine Anmeldung erforderlich.

      Viele Grüße,
      Horst Haschmisch

      --
      Autsch, das war ein Ton-Ei...
      1. Ich habe festgestellt, dass google auch solche Seiten in den Index nimmt. Meinen Hinweis, dass die Webmastertools von google sehr hilfreich sind, gebe ich auch gerne nochmal weiter

        Den Hinweis hattest du im genannten Fred bereits gegeben :-(

        Kannst du vielleicht doch hier noch etwas fundierteres bringen? Also fundierter als "die Webmastertools von Google sind sehr hilfreich" ;-)

        1. h1,

          Den Hinweis hattest du im genannten Fred bereits gegeben :-(

          Kannst du vielleicht doch hier noch etwas fundierteres bringen? Also fundierter als "die Webmastertools von Google sind sehr hilfreich" ;-)

          Du ersparst mir aber auch nüschd: Nach meiner Anmeldung da, hab ich gesehen, dass google mein Masterscript (Authorization Basic) im Index hat. Es war in meinem sitemap.xml verlinkt und es war ein peinlicher Fehler in meinem Content-Management, was die Datei sitemap.xml automatisch erstellt. Der Fehler ist mittlerweile Geschichte ;-)

          Ich Trotyl hätte das natürlich auch ohne die Webmastertools von google sehen können, wenn ich die Resultate meiner Arbeit ein bischen besser kontrolliert hätte (Mann!).

          Viele Grüße,
          Horst Pilgrim

          --
          1. Hi!

            Kannst du vielleicht doch hier noch etwas fundierteres bringen? Also fundierter als "die Webmastertools von Google sind sehr hilfreich" ;-)

            [..] hab ich gesehen, dass google mein Masterscript (Authorization Basic) im Index hat. Es war in meinem sitemap.xml verlinkt

            Dir fällt schon etwas auf?

            und es war ein peinlicher Fehler in meinem Content-Management, was die Datei sitemap.xml automatisch erstellt. Der Fehler ist mittlerweile Geschichte ;-)

            Zumal Du den Grund für dieses Verhalten abgestellt hast?

            off:PP

            --
            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
          2. Du ersparst mir aber auch nüschd: Nach meiner Anmeldung da, hab ich gesehen, dass google mein Masterscript (Authorization Basic) im Index hat. Es war in meinem sitemap.xml verlinkt und es war ein peinlicher Fehler in meinem Content-Management, was die Datei sitemap.xml automatisch erstellt.

            Woher soll Google die nötigen Credentials gehabt haben? Wie hat Google den Treffer verlinkt? Klassich á la http://user:pass@example.org ?
            So richtig fundiert ist das jetzt immer noch nüscht, Hotti :-(

            1. hi,

              Woher soll Google die nötigen Credentials gehabt haben?

              Falsche Frage.

              So richtig fundiert ist das jetzt immer noch nüscht, Hotti :-(

              Google hat von mir einen URL bekommen und diesen zusammen mit Status 401 in seinen Index aufgenommen. Was ist denn daran nicht verständlich?

              Vielleicht hilft eine bildliche Darstellung:

              Search Engine Main Index Table:

              Status |  URL
              ---------------------------------------
               401   |  http://example.com/hugo.html

              URL habe ich geliefert. Den Status 401 liefert der Webserver wegen ner .htaccess. Soll ich das auch noch erklären????

              Hotti ;-)

              1. Google hat von mir einen URL bekommen und diesen zusammen mit Status 401 in seinen Index aufgenommen. Was ist denn daran nicht verständlich?

                Das ist 100% verständlich und nachvollziehbar, aber leider das komplette Gegenteil von

                erkläre jetzt bitte mal genau, was du mit deiner Behauptung, Google könnte Seiteninhalte auslesen, die per HTTP Auth geschützt sind, meinst.

                :-(

                Ich danke dir dennoch, dass du dir die Zeit genommen hast.

                1. hi,

                  Das ist 100% verständlich und nachvollziehbar, aber leider das komplette Gegenteil von

                  erkläre jetzt bitte mal genau, was du mit deiner Behauptung, Google könnte Seiteninhalte auslesen, die per HTTP Auth geschützt sind, meinst.

                  Dass google die Seiteninhalte auslesen kann, habe ich auch nie behauptet.

                  Ich danke dir dennoch, dass du dir die Zeit genommen hast.

                  Danke Dir für den Link ;-)

                  Ich behaupte aber jetzt mal was, gestützt von den google-Webmastertools: Links auf Seiten, die google lesen kann, werden mit dem Status 200 in den Index aufgenommen.

                  Evntl. nochn Tipp: Setze keine Links zu Seiten, die ein Passwort erfordern ;-)

                  Schöne Feiertage auch,
                  Horst Haselhuhn

  2. Moin Moin!

    unter der Voraussetzung, dass ein hash im Lauf des Scripts unverändert bleibt, Frage: ist die Reihenfolge bei einem mehrmaligen Schleifendurchlauf

    foreach my $k(keys %hash){}

    immer dieselbe???

    RTFM:

    The keys are returned in an apparently random order. The actual random order is subject to change in future versions of perl, but it is guaranteed to be the same order as either the values or each function produces (given that the hash has not been modified). Since Perl 5.8.1 the ordering is different even between different runs of Perl for security reasons (see "Algorithmic Complexity Attacks" in perlsec).

    Du solltest es vermeiden, Code zu bauen, der sich darauf stützt, das Schlüssel oder Werte von Hashes in einer bestimmten Reihenfolge geliefert werden. Früher oder später schießt Du Dir damit in den Fuß. Wenn Du eine garantierte Reihenfolge benötigst, dann sortiere. Insbesondere, wenn Du an zwei weit voneinander entfernten Stellen die selbe Reihenfolge brauchst.

    keys() und values() dicht nebeneinander, mit einem dicken Kommentar, dass beide garantiert die selbe Reihenfolge haben, würde ich mit viel Mühe gerade noch durchgehen lassen, aber selbst da kannst Du mit each() meistens saubereren Code schreiben.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. h1,

      ... kannst Du mit each() meistens saubereren Code schreiben.

      Seit gestern abend schon beschlossene Sache: Ich werde each verwenden, wobei die Reihenfolge bedeutungslos ist. Wenn ich was habe, wo die Reihenfolge ne Rolle spielt, nehmen ich keinen %hash.

      Hotti