小编Hol*_*lli的帖子

将复杂的结构传递给Windows API

我正在尝试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)

winapi perl6 kernel32 nativecall raku

6
推荐指数
1
解决办法
156
查看次数

Perl regex与Raku regex,引擎的差异?

我正在尝试将针对背包问题的基于正则表达式的解决方案从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)

regex raku

6
推荐指数
1
解决办法
78
查看次数

急需的奇怪行为

天生懒惰

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)

raku

6
推荐指数
2
解决办法
170
查看次数

用于抑制接收器上下文的自定义运算符

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)

我如何摆脱它并使我的操作员工作?我知道我可以将它分配给$其他东西,但我不想要那样。

raku

6
推荐指数
1
解决办法
69
查看次数

将 Subset 中正则表达式的命名捕获放入签名中的变量中

考虑

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)

这当然行不通。甚至有可能做到这一点吗?

raku

4
推荐指数
1
解决办法
73
查看次数

Perl WWW ::机械化Instagram

是否可以在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)

perl instagram

0
推荐指数
1
解决办法
51
查看次数

标签 统计

raku ×5

instagram ×1

kernel32 ×1

nativecall ×1

perl ×1

perl6 ×1

regex ×1

winapi ×1