2011-01-14 15 views
6

बिनमोड का उपयोग करते समय, क्या मुझे परतों को संभावित रूप से पिछले प्रयोग किए गए बिनमोड से पॉप करना चाहिए?क्या मुझे प्रत्येक बिनमोड के बाद पॉप करना चाहिए?

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use autodie; 

open my $tty, '>:encoding(utf8)', '/dev/tty'; # ... 
close $tty; 
open $tty, '>:encoding(latin1)', '/dev/tty'; # ... 
close $tty; 
open $tty, '>:encoding(utf8)', '/dev/tty'; # ... 
close $tty; 
open $tty, '>:encoding(latin1)', '/dev/tty'; # ... 
close $tty; 

open $tty, '>:bytes', '/dev/tty'; 
say "@{[ PerlIO::get_layers($tty) ]}"; # unix perlio 
close $tty; 

say "----------------------------------------"; 

binmode STDOUT, ':encoding(utf8)'; # ... 
binmode STDOUT, ':encoding(latin1)'; # ... 
binmode STDOUT, ':encoding(utf8)'; # ... 
binmode STDOUT, ':encoding(latin1)'; # ... 

binmode STDOUT, ':bytes'; 
say "@{[ PerlIO::get_layers(*STDOUT) ]}"; # unix perlio encoding(utf8)/
# utf8 encoding(iso-8859-1) utf8 encoding(utf8) utf8 encoding(iso-8859-1) 


binmode STDOUT, ':pop:pop:pop:pop:bytes'; 
say "@{[ PerlIO::get_layers(*STDOUT) ]}"; # unix perlio 

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use autodie; 

open my $tty, '>:encoding(utf8)', '/dev/tty'; # ... 
close $tty; 

open $tty, '>:raw', '/dev/tty'; 
say "@{[ PerlIO::get_layers($tty) ]}"; # unix 
close $tty; 

say "----------------------------------------"; 

binmode STDOUT, ':encoding(utf8)'; # ... 

binmode STDOUT, ':raw'; 
say "@{[ PerlIO::get_layers(*STDOUT) ]}"; # unix perlio 

binmode STDOUT, ':pop:raw'; 
say "@{[ PerlIO::get_layers(*STDOUT) ]}"; # unix 

उत्तर

2

:pop ऐसे :encoding(...) रूप असली परतों, पॉप की आवश्यकता है। तो हाँ, अगर आप किसी वास्तविक परत को किसी दूसरे से बदलना चाहते हैं, तो आपको :pop करना होगा।

लेकिन ध्यान दें कि धक्का :raw वास्तव में पॉप की एक श्रृंखला में यह परिणाम है ... और :perlio स्वचालित रूप से :unix नीचे डाल देता है। तो पॉप की सटीक संख्या वास्तव में मौजूदा परतों पर निर्भर करती है।

documentation के रूप में खुद को कहते हैं:

एक और अधिक सुरुचिपूर्ण (और सुरक्षित) इंटरफेस की जरूरत है।

संबंधित मुद्दे

 संबंधित मुद्दे