我正在尝试GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO)使用Perl 6和(当然)NativeCall从Windows API 使用该函数。
我想我已经CONSOLE_SCREEN_BUFFER_INFO正确设置了功能需要的结构,但是当我尝试转储其内容时,代码在调用后崩溃。
这是证明问题的最短的方法(不是很完全,但是很接近):
use NativeCall;
constant \HANDLE := Pointer[void];
constant \SHORT := int16;
constant \USHORT := uint16;
constant \WORD := uint16;
constant \DWORD := uint32;
constant \BOOL := int32;
constant \STD_OUTPUT_HANDLE := -11;
constant \STD_INPUT_HANDLE := -10;
class COORD is repr('CStruct') {
has SHORT $.X;
has SHORT $.Y;
}
class SMALL_RECT is repr("CStruct") {
has SHORT $.Left;
has SHORT $.Top;
has SHORT $.Right;
has SHORT $.Bottom;
};
class CONSOLE_SCREEN_BUFFER_INFO is repr("CStruct") { …Run Code Online (Sandbox Code Playgroud) 我正在尝试将针对背包问题的基于正则表达式的解决方案从Perl转换为raku。Perlmonks的详细资料
Perl解决方案创建此正则表达式:
(?<P>(?:vvvvvvvvvv)?)
(?<B>(?:vv)?)
(?<Y>(?:vvvv)?)
(?<G>(?:vv)?)
(?<R>(?:v)?)
0
(?=
(?(?{ $1 })wwww|)
(?(?{ $2 })w|)
(?(?{ $3 })wwwwwwwwwwww|)
(?(?{ $4 })ww|)
(?(?{ $5 })w|)
)
Run Code Online (Sandbox Code Playgroud)
与匹配vvvvvvvvvvvvvvvvvvv0wwwwwwwwwwwwwww。之后,匹配哈希%+包含要放入麻袋中的物品。
我的raku转换是:
$<B> = [ [ vv ]? ]
$<P> = [ [ vvvvvvvvvv ]? ]
$<R> = [ [ v ]? ]
$<Y> = [ [ vvvv ]? ]
$<G> = [ [ vv ]? ]
0
<?before
[ { say "B"; say $/<B>; say $0; say …Run Code Online (Sandbox Code Playgroud) 天生懒惰
D:\>6e "my @bar = 'a', 'b', 'c'; sub foo( @b ) { my $bar = 0; gather loop { print "*"; take ($bar, @b[$bar]); $bar++; last if $bar > 2; } }; .print for foo( @bar )"
*(0 a)*(1 b)*(2 c)
Run Code Online (Sandbox Code Playgroud)
到目前为止,如此预期。现在,让我们热切期待。
D:\>6e "my @bar = 'a', 'b', 'c'; sub foo( @b ) { my $bar = 0; eager gather loop { print "*"; take ($bar, @b[$bar]); $bar++; last if $bar > 2; } }; .print for foo( @bar …Run Code Online (Sandbox Code Playgroud) multi sub infix:<*>( Numeric $i, Block $b ) { &$b($_) for ^($i.Int); }
3 * { .say };
Run Code Online (Sandbox Code Playgroud)
产量
Useless use of "*" in expression "3 * { .say }" in sink context
Run Code Online (Sandbox Code Playgroud)
我如何摆脱它并使我的操作员工作?我知道我可以将它分配给$其他东西,但我不想要那样。
考虑
subset MySubset of Str where * ~~ /^ \d $<interesting> = ( \d+ ) $/;
Run Code Online (Sandbox Code Playgroud)
现在我想在我的签名中使用子集作为类型,但是通过解包将捕获的部分放入一个变量中,有点像
sub f( MySubset $( :$interesting ) )
{
say $interesting;
}
f( "12345678" ); # should say 2345678
Run Code Online (Sandbox Code Playgroud)
这当然行不通。甚至有可能做到这一点吗?
是否可以在Perl代码中使用WWW :: Mechanize登录Instagram?当我在https://www.instagram.com/accounts/login/?source=auth_switcher下加载登录表单时,我的代码显示了一个错误,它找不到登录表单。
my $browser;
my $res;
my $url;
my $username;
my $password;
my @formlist;
$username = "aaa";
$password = "bbb";
$browser = WWW::Mechanize->new();
$url = "https://www.instagram.com/accounts/login/?source=auth_switcher";
$browser->get($url);
$browser->form_number(1);
$browser->field("username", $username);
$browser->field("password", $password);
$browser->click();
Run Code Online (Sandbox Code Playgroud)