Kategorie: Programmierung

Aktuelles Verzeichnis nicht mehr Teil von @INC

Gerade beim Wechsel zwischen verschiedenen Perl-Versionen über ein Feature (und keinen Bug) gestolpert: seit Version 5.26 ist das aktuelle Verzeichnis nicht mehr im Standard-Include-Pfad @INC enthalten.

Als Grund hierfür gibt perldelta zur Version 5.26 unschöne Begleiterscheinungen der bisherigen Vorgehensweise an:

While convenient, this has security implications: for example, where a script attempts to load an optional module when its current directory is untrusted (such as /tmp), it could load and execute code from under that directory.

Weiterlesen

 

Bytefolge mit Perl ersetzen

Die Funktionen, die Perl für das Suchen und Ersetzen innerhalb von Strings bereitstellt, lassen sich auch hervorragend dazu verwenden, Bytefolgen innerhalb von Binärdaten zu bearbeiten.

Mittels der pack-Funktion wird die zu suchende Bytefolge in einer Variable gespeichert

$source = pack("C*", 0x00, 0x40, 0x06, 0x00, 0x00, 0xB0, 0x04, 0x00);

Deren Position innerhalb der zu durchsuchenden Daten kann durch die Funktion index ermittelt

$pos = index($data, $source);

und ggf.

Weiterlesen

 

Creating default object from empty value bei der Verwendung von chained Properties

Erstellt man in PHP eine neue Instanz der vordefinierten Klasse StdClass, so können dieser anschließend beliebige Eigenschaften zugewiesen werden:

$test = new StdClass();
$test->property = 1;

Versucht man allerdings mehrere Eigenschaften ohne vorherige (Teil-)Initialisierung zu verketten, wird dies von PHP mit einer entsprechenden Warnung kommentiert:

$test->anotherproperty->propertytoo = 7;

Warning: Creating default object from empty value in ... on line ..

Um diese Warnung zu vermeiden (und richtig zu initialisieren), kann eine kleine Erweiterung der Klasse StdClass vorgenommen werden, welche beim Zugriff auf jede Eigenschaft prüft, ob diese bereits existiert und ggf.

Weiterlesen

 

Zugriffe auf „%windir%\System32“ und Unterverzeichnisse

Einer der Gründe, warum in der EDV zeitliche Voraussagen so schwer zu treffen sind, ist die Tatsache, daß man immer wieder über Dinge stolpert, mit denen man nicht gerechnet hat.

Beim Versuch, ein Aufräumskript für die Hinterlassenschaften des AMD-Treibers in Perl zu schreiben, wurde eine Datei nicht gefunden, die laut Explorer und Eingabeaufforderung aber sehr wohl vorhanden war:

C:\Windows\System32\drivers>dir ati2erec.dll
...

Weiterlesen

 

Methods with the same name as their class will not be constructors in a future version of PHP

Mit PHP 4 wurden Konstruktoren eingeführt, welche den gleichen Namen haben wie die Klasse, in der sie definiert wurden:

class tolleKlasse {

    function tolleKlasse() {
    
        // ...
    }
}

In PHP 5 wurden diese Konstruktoren beibehalten, gleichzeitig aber mit der Methode

__construct()

eine neue Art der Konstruktor-Definition eingeführt. Seit PHP 7 wird bei der Verwendung von PHP 4 Konstruktoren nun die Warnung „Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP“ ausgegeben, die darauf hinweist, daß ab PHP 8 die gleichnamigen Methoden nur noch als normale Methoden, nicht aber als Konstuktoren behandelt werden.

Weiterlesen