Christian Kruse: Woran erkennt man einen Bug

Beitrag lesen

Hallo pl,

deine Arroganz finde ich wirklich unerträglich.

Das ist kein Perl-Bug, sondern ein pl-Bug. Es fehlt das use IO::File in deinem Beispiel.

Falsch! Selbst wenn es fehlen würde, […]

Nicht würde. Es fehlt.

[…] es würde eine andere Fehlermeldung kommen. Weil nämlich das ganze Erbe von IO::Handle fehlt!

Nein. Das wird implizit mit importiert durch das use IO::File-Statement.

Und @dedlfix behaupet ja

IO::Handle: bad open mode: O_CREAT at - line 4.

sei die Fehlermeldung, […]

Das ist keine Behauptung, sondern Fakt.

ckruse@sunshine:~$ cat test.pl 
#!/usr/bin/perl -w

my $fh = IO::File->new;
chdir "/tmp";
my $filename = "files/asdf";
$fh->open($filename, O_CREAT) or die $!;
ckruse@sunshine:~$ ./test.pl 
IO::Handle: bad open mode: O_CREAT at ./test.pl line 6.
ckruse@sunshine:~$ perl -v

This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi
(with 63 registered patches, see perl -V for more detail)

Copyright 1987-2017, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

ckruse@sunshine:~$ 

Mehr Bescheidenheit stünde dir gut zu Gesicht.

also daß sie von IO::Handle kommt. Wenn das jedoch nicht eingebunden ist, wie bitte kann es dann einen Fehler melden!?

Durch das use-Statement wird implizit IO::Handle als Abhängigkeit von IO::File importiert.

ckruse@sunshine:~$ cat test.pl 
#!/usr/bin/perl -w

use Data::Dumper;

print Dumper \%INC;

my $fh = IO::File->new;
chdir "/tmp";
my $filename = "files/asdf";
$fh->open($filename, O_CREAT) or die $!;
ckruse@sunshine:~$ ./test.pl 
$VAR1 = {
          'warnings.pm' => '/usr/share/perl/5.26/warnings.pm',
          'bytes.pm' => '/usr/share/perl/5.26/bytes.pm',
          'XSLoader.pm' => '/usr/share/perl/5.26/XSLoader.pm',
          'constant.pm' => '/usr/share/perl/5.26/constant.pm',
          'Data/Dumper.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/Data/Dumper.pm',
          'Exporter.pm' => '/usr/share/perl/5.26/Exporter.pm',
          'warnings/register.pm' => '/usr/share/perl/5.26/warnings/register.pm',
          'strict.pm' => '/usr/share/perl/5.26/strict.pm',
          'Carp.pm' => '/usr/share/perl/5.26/Carp.pm'
        };
IO::Handle: bad open mode: O_CREAT at ./test.pl line 10.
ckruse@sunshine:~$ cat test1.pl 
#!/usr/bin/perl -w

use Data::Dumper;
use IO::File;

print Dumper \%INC;

my $fh = IO::File->new;
chdir "/tmp";
my $filename = "files/asdf";
$fh->open($filename, O_CREAT) or die $!;
ckruse@sunshine:~$ ./test1.pl 
$VAR1 = {
          'strict.pm' => '/usr/share/perl/5.26/strict.pm',
          'Symbol.pm' => '/usr/share/perl/5.26/Symbol.pm',
          'IO/Seekable.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/IO/Seekable.pm',
          'IO/File.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/IO/File.pm',
          'SelectSaver.pm' => '/usr/share/perl/5.26/SelectSaver.pm',
          'IO.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/IO.pm',
          'constant.pm' => '/usr/share/perl/5.26/constant.pm',
          'bytes.pm' => '/usr/share/perl/5.26/bytes.pm',
          'Fcntl.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/Fcntl.pm',
          'Exporter.pm' => '/usr/share/perl/5.26/Exporter.pm',
          'XSLoader.pm' => '/usr/share/perl/5.26/XSLoader.pm',
          'Data/Dumper.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/Data/Dumper.pm',
          'IO/Handle.pm' => '/usr/lib/x86_64-linux-gnu/perl/5.26/IO/Handle.pm',
          'Carp.pm' => '/usr/share/perl/5.26/Carp.pm',
          'warnings/register.pm' => '/usr/share/perl/5.26/warnings/register.pm',
          'warnings.pm' => '/usr/share/perl/5.26/warnings.pm'
        };
No such file or directory at ./test1.pl line 11.
ckruse@sunshine:~$ 

Edit: die Meldung, dass O_CREAT ein fehlerhafter open mode sei, kommt durch die Eigenheit von Perl, an allen möglichen und unmöglichen Stellen Dinge einfach in Strings zu verwandeln. Ein use strict hätte dich vor diesem Fehler bewahrt:

ckruse@sunshine:~$ cat test2.pl 
#!/usr/bin/perl -w

use Data::Dumper;

print Dumper O_CREAT;

ckruse@sunshine:~$ ./test2.pl 
$VAR1 = 'O_CREAT';
ckruse@sunshine:~$ cat test3.pl 
#!/usr/bin/perl -w

use strict;
use Data::Dumper;

print Dumper O_CREAT;

ckruse@sunshine:~$ ./test3.pl 
Bareword "O_CREAT" not allowed while "strict subs" in use at ./test3.pl line 6.
Execution of ./test3.pl aborted due to compilation errors.
ckruse@sunshine:~$ 

Also bitte mal Gehirn einschalten!

Mein lieber Freund und Kupferstecher, wie wäre es, wenn du dir mal an die eigene Nase fasst?

Übrigens: wenn man das ergänzt, bekommt man wie erwartet die Fehlermeldung No such file or directory at ./test.pl line 8. - denn das Verzeichnis files existiert nicht in /tmp.

Logisch.

Nix logisch. Deine Behauptung war, dass der path separator ein Teil des Dateinamens sein kann. Das sieht hier nicht danach aus (und widerspräche auch der Doku).

LG,
CK

0 92

Perl Filesystem Encoding erkennen

beatovich
  • perl
  1. 0
    dedlfix
    1. 0
      beatovich
      1. 0
        pl
      2. 0
        pl
        1. 0
          beatovich
          1. 0
            pl
            1. 0
              beatovich
              1. 0
                pl
                1. 0
                  beatovich
                  1. 0
                    pl
                    1. 0
                      pl
                      1. 0
                        beatovich
                    2. 0
                      beatovich
                      1. 0
                        pl
                        1. 0
                          beatovich
                          1. 0
                            pl
                            1. 0
                              beatovich
                              1. 0
                                Tabellenkalk
                              2. 0
                                pl
                                1. 0
                                  beatovich
                                2. 0
                                  beatovich
                                  1. 0
                                    pl
                                    1. 0
                                      beatovich
                                      1. 0
                                        pl
                                        1. 0
                                          beatovich
                                          1. -2
                                            pl
                                            1. 0
                                              beatovich
                                              1. 0
                                                pl
                                              2. 1
                                                Rolf B
                                                1. 0
                                                  beatovich
                                                  1. 0
                                                    Rolf B
                                                    1. 0
                                                      beatovich
                                                    2. -1
                                                      pl
                                                      1. 0
                                                        beatovich
                                                        1. -1
                                                          pl
                                                      2. 1
                                                        Rolf B
                                                        1. -1
                                                          pl
                                                          1. 0
                                                            Rolf B
                                                            1. 0
                                                              beatovich
                                                              1. 0
                                                                Rolf B
                                                                1. 0
                                                                  beatovich
                                                                  1. 0
                                                                    Rolf B
                                                            2. 0
                                                              pl
                                                        2. -1
                                                          pl
                                                        3. 0
                                                          pl
                                                          1. 0
                                                            dedlfix
                                                            1. 0
                                                              pl
                                                              1. 1
                                                                dedlfix
                                                                1. 0
                                                                  pl
    2. 1
      ursus contionabundo
      1. 0
        ursus contionabundo
        1. 0
          TS
          • dateisystem
          • perl
          1. 0
            ursus contionabundo
        2. 0
          Robert B.
          1. 0
            pl
            1. 1
              Matthias Apsel
              • sonstiges
              1. -1
                pl
                1. 0
                  dedlfix
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. 0
                        pl
                        1. 0
                          dedlfix
                          1. -1
                            pl
                            1. 0
                              dedlfix
                              1. 0
                                pl
                            2. 0
                              Christian Kruse
                              1. -1

                                Woran erkennt man einen Bug

                                pl
                                1. 0
                                  dedlfix
                                  1. 0
                                    Rolf B
                                    1. -3
                                      pl
                                      1. 1
                                        Robert B.
                                  2. 0
                                    pl
                                  3. 0

                                    Woran erkennt man einen Bug, updated

                                    pl
                                    1. 0
                                      dedlfix
                                      1. -1
                                        pl
                                2. 6
                                  Christian Kruse
                                  1. -2
                                    pl
                                    1. 5
                                      Christian Kruse
                2. 0
                  beatovich
                3. 0
                  Robert B.
                  1. 0

                    Systematische Fehler

                    pl
                    1. 0
                      Robert B.
            2. 0
              Robert B.
          2. 0
            ursus contionabundo
            1. 0
              Robert B.
  2. 0
    TS
  3. 0
    pl
  4. 0
    klawischnigg
    1. 0
      pl
      1. 0
        klawischnigg
        1. -1
          pl