Frank85: Filehandler innerhalb eines Packages an Funktion übergeben

Hallo zusammen,

ich hab eine Klasse in Perl 5.8.
package Test;

sub new{  
...  
open(FILE,"> $_[1]); # Datei öffnen  
}  
  
#in die Datei schreiben.  
sub write{  
  
print FILE "Blablub";  
}

Ich würde halt gerne die Datei öffnen, was auch noch nicht geht.
UNd dann gerne auf FILE in einer sub-Funktion die von außen aufgeruft verwenden.

Hat das schonmal jemand gemacht?

  1. hi,

    Ich würde halt gerne die Datei öffnen, was auch noch nicht geht.
    UNd dann gerne auf FILE in einer sub-Funktion die von außen aufgeruft verwenden.

    Hat das schonmal jemand gemacht?

    Stichwort Glob.

    my $ref = readini(*DATA);

    In der Subfunktion kannst Du auch prüfen, ob ein FileHandle oder eine Datei übergeben wurde:

      
    	# Testen ob ein Handle oder eine Datei übergeben wurde  
    	my $fh;  
    	if(defined fileno $fx){  
    		$fh = $fx;  
    	}  
    	else{  
    		open($fh, $fx) || return;  
    	}  
    
    

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Stichwort Glob.

      my $ref = readini(*DATA);

      In der Subfunktion kannst Du auch prüfen, ob ein FileHandle oder eine Datei übergeben wurde:

      Testen ob ein Handle oder eine Datei übergeben wurde

      my $fh;
      if(defined fileno $fx){
      $fh = $fx;
      }
      else{
      open($fh, $fx) || return;
      }

      
      >   
      > Hotte  
        
      Also ich möcte nicht lesen, das Problem ist wie ich schrieb, dass öffnen der Datei mit OPEN und das speichern des Filehandlers in einer Variablen des Packages.  
      Diesen Filehandler möchte ich zur Ausgabe (nicht einlesen) in einer Unterfunktion weiterverwenden.
      
  2. Guten Tag,

    Ich würde halt gerne die Datei öffnen, was auch noch nicht geht.

    Was genau "geht" nicht?

    UNd dann gerne auf FILE in einer sub-Funktion die von außen aufgeruft verwenden.

    Du kannst einer Subroutine geöffnete Filehandles als Referenz übergeben:

    #! /usr/bin/perl  
    use Data::Dumper;  
    use warnings;  
    use strict;  
      
    open HANDLE, '/dev/urandom'  
      or die("Can't open /dev/urandom for read");  
      
    sub foo {  
    	my $handle = shift;  
        	my $out;  
    	print Dumper $handle;  
    	read($handle, $out, 100);  
    	print Dumper $out;  
    }  
      
    foo(\*HANDLE);  
    close(HANDLE);  
      
    exit 0;  
    
    

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    Certified Urchin Admin
    1. Was genau "geht" nicht?

      Ich würde halt denken, dass beim Aufruf von new halt schon die Datei erzeugt wird. Was aber nicht geschieht.

      Du kannst einer Subroutine geöffnete Filehandles als Referenz übergeben:

      open HANDLE, '/dev/urandom' ...

      sub foo {
      my $handle = shift;
           my $out;
      print Dumper $handle;
      read($handle, $out, 100);
      print Dumper $out;
      }

      foo(\*HANDLE);
      ...
      [/code]

      Was macht denn die Funktion?
      Ich möchte auf jeden Fall ja etwas in die Datei schreiben.

      Gruß
      Frank