wchar_t
मेरी मशीन पर 32 बिट्स है। NativeCall doco से, आप उनमें से एक सरणी घोषित कर सकते हैं और सरणी नाम सूचक के रूप में कार्य करेगा;
#!/usr/bin/env perl6
use v6;
use NCurses; # To get iniscr(), endwin() etc
use NativeCall;
# Need to run setlocale from the C library
my int32 constant LC_ALL = 6; # From locale.h
my sub setlocale(int32, Str) returns Str is native(Str) { * }
constant LIB = 'libncursesw.so.5';
sub addwstr(CArray[int32]) returns int32 is native(LIB) { * }
# The smiley : Codepoint 0x263a
# Latin space : Codepoint 0x20 (Ascii decimal ord 32)
# Check mark (tick) : Codepoint 0x2713
my CArray[int32] $wchar_str .= new(0x263a, 0x20, 0x2713);
setlocale(LC_ALL, "");
initscr();
move(2,2);
addwstr($wchar_str);
nc_refresh;
while getch() < 0 {};
endwin;
यह प्रिंट मेरी मशीन पर "☺ ✓" है। यह सेटलोकेल के कॉल के बिना काम नहीं करता है। (संभवतः एन्कोडेड UTF-8) और यह सिर्फ काम करता है तो आप सिर्फ सामान्य perl6 तार पारित कर सकते हैं -
एक के रूप में अलग रूप में, आप 'w' कार्यों का उपयोग करने के लिए नहीं है। यह एक ही परिणाम पैदा करता है;
#!/usr/bin/env perl6
use v6;
use NCurses;
use NativeCall;
# Need to run setlocale from the standard C library
my int32 constant LC_ALL = 6; # From locale.h
my sub setlocale(int32, Str) returns Str is native(Str) { * }
my $ordinary_scalar = "☺ ✓";
setlocale(LC_ALL, "");
initscr();
move(2,2);
addstr($ordinary_scalar); # No 'w' necessary
nc_refresh;
while getch() < 0 {};
endwin;
यदि मुझे गलत नहीं लगता है तो यह 'स्ट्रक्स एन्कोडेड' (utf32 ') लिनक्स पर होगा। – ElderBug
एल्डरबग: यह मुझे देता है: "देशी कॉल के लिए अज्ञात स्ट्रिंग एन्कोडिंग: utf32 in ..." (लिनक्स पर)। –
मैं वास्तव में एक पर्ल लड़का नहीं हूं इसलिए मुझे यकीन नहीं है। लिनक्स पर 'wchar_t' यूटीएफ -32 है। शायद यह 'यूटीएफ -32' 'के साथ काम करेगा? – ElderBug