in reply to sysread() is deprecated on :utf8 handles
Update: see also http://perldoc.perl.org/perl5240delta.html#sysread()%2c-syswrite()%2c-recv()-and-send()-are-deprecated-on-%3autf8-handles.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: sysread() is deprecated on :utf8 handles
by mje (Curate) on Jul 20, 2017 at 14:57 UTC | |
I appreciate that Laurent_R but the code cannot use buffered IO as it is using IO::Select which is why the code was changed to use sysread many years ago (apparently). sysread did/does support :utf8 although I realise it is unvalidated UTF-8. The problem I am seeking an answer to is how to continue using sysread without getting the deprecated warnings OR how to change the code to use some other unbuffered read that supports UTF8 layer. So far I have tried changing the layer on the read end of the socket to :unix (instead of UTF-8), reading the bytes and decoding them. This appears to work but has the caveate that if a part message was read the octets in it might fall in the middle of a UTF8 character. | [reply] |
by thanos1983 (Parson) on Jul 20, 2017 at 15:36 UTC | |
Hello again mje, Did you try the module that I recommend earlier? Regarding your question The problem I am seeking an answer to is how to continue using sysread without getting the deprecated warnings I do not recommend that but you can read more here Supressing warnings. Let us know what you have tried so far, provide us a sample of code to replicate the problem. We are just guessing for the moment. Hope this helps, BR
Seeking for Perl wisdom...on the process of learning...not there...yet!
| [reply] [d/l] [select] |
by mje (Curate) on Jul 20, 2017 at 15:56 UTC | |
I did not try File::Slurper because I am not slurping a file, I'm reading data from a socket. I don't want to suppress the warning since it is warning of a deprecation which implies it will break in the future. There is a parent and a forked child process. The child creates a socket and starts listening for connections using IO::Select to see when the socket is read ready. The parent connects to the child's socket, sets encoding(UTF-8) and sends UTF-8 encoded XML down the socket to the child. The child sees the parents connect, accepts it enables encoding(UTF-8) on the new socket. When the child sees data, it reads it with sysread. There is a bit more to it than that but that is the essence of it.
The code is like (but not exactly) this
Results in
| [reply] [d/l] [select] |
by thanos1983 (Parson) on Jul 20, 2017 at 19:57 UTC |