1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub open_COM {
...
$tie_ob = tie(*PORT,'Win32::SerialPort', $cfgfile); #Create filehandle only local
...
#DEBUG
print PORT "42, why not?\n"; # Yepp, working
...
}
sub txd {
my $msg = shift;
printf PORT "%s\n\r",$msg; # ouch... NOT working
usleep(200000);
}
perldoc perltieWhen tying a handle, the first argument to tie should begin with an asterisk. So, if you are tying STDOUT, use *STDOUT . If you have assigned it to a scalar variable, say $handle , use *$handle . tie $handle ties the scalar variable $handle , not the handle inside it.
2018-04-27T13:06:58 Linuxerperldoc perltiethe first argument to tie should begin with an asterisk. So, if you are tying STDOUT, use *STDOUT.
2018-04-27T15:03:47 hlubenow2018-04-27T13:06:58 Linuxerperldoc perltiethe first argument to tie should begin with an asterisk. So, if you are tying STDOUT, use *STDOUT.
Hmm, was ist denn das? Sieht aus wie ein C-Zeiger, aber das kann's wohl nicht sein.
QuoteTypeglobs werden heutzutage in Perl nicht mehr so oft verwendet wie früher, als es noch keine Referenzen gab und man die Typeglobs dazu nutzte, Verweise auf Listen an Subroutinen zu übergeben. Typeglobs stellen aber auch einen Weg dar, um Referenzen auf Datei-Handles zu erzeugen, und geben uns damit eine Möglichkeit an die Hand, bei Bedarf Datei-Handles in und aus Subroutinen zu übergeben oder lokale Datei-Handles zu erzeugen.
1 2 3 4 5 6
# Response als Rohdaten ausgeben # Optional FileHandle als Argument sub print_rawdata{ my $self = shift; my $fh = shift || *STDOUT; ...
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);