Thread Referenz auf FILEHANDLE oder Global (10 answers)
Opened by Karsten42 at 2018-04-27 11:09

rosti
 2018-04-27 16:55
#188311 #188311
User since
2011-03-19
3199 Artikel
BenutzerIn
[Homepage]
user image
Das Problem ist, daß Tie::Handle einen *Glob haben will, damit es mit Tie::Scalar keinen Konflikt gibt.

Andererseits funktioniert der Typeglob nur, wenn im Scalar auf welchen sich der glob bezieht, ein eindeutiger Type erkennbar ist. Untenstehender Trick funktioniert:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use Win32::SerialPort qw(:STAT 0.19);
use IO::Handle;

# Dummy handle damit der Typeglob funktioniert
my $com = IO::Handle->new;
# und damit funktioniert der Typeglocb
*COM = $com;

my $PortObj = tie *COM, 'Win32::SerialPort', 'd:/home/dev/comport3.cfg' or die $@;

# Modem abfragen
my $out = "ATQ0V1E0".pack "C", 13;
print COM $out;

my ($BlockingFlags, $InBytes, $OutBytes, $LatchErrorFlags) = 
  $PortObj->status() or die "can't get status";
print Dumper $PortObj->read($InBytes);


Der Trick besteht also darin, daß ein beliebiges Handle als Dummy erstellt wird. Mit IO::File oder IO::String funktioniert das auch weil diese Klassen von IO::Handle erben. Danach kannst Du

Code (perl): (dl )
1
2
print $com $sequence;
print COM $sequence


gleichermaßen anwenden.




mfg
Last edited: 2018-04-27 17:27:01 +0200 (CEST)

View full thread Referenz auf FILEHANDLE oder Global