以下shell代码正确创建了一系列符号引用
git symbolic-ref "first" "refs/heads/master"
git symbolic-ref "second" "first"
git symbolic-ref "nested/third" "second"
git symbolic-ref "refs/heads/fourth" "nested/third"
Run Code Online (Sandbox Code Playgroud)
以下shell代码正确解析了最新创建的对master的tip的符号引用.
git show-ref "refs/heads/fourth"
Run Code Online (Sandbox Code Playgroud)
这些用例都没有在官方文档中描述(git-symbolic-ref doc,git-show-ref doc).
但是,以下不起作用
git check-ref-format --print "first"
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:
refs/heads
目录中存储符号引用吗?"first"
,这是否意味着不建议在同一级别创建符号引用"HEAD"
?或者这个命令可能不是为了处理符号链接?我的目的是清楚地了解支持的内容,以及我没有解决任何问题或从中获益.
我需要在perl中实现以下功能
printmsg(@val1, $msg1) if @val1;
printmsg(@val2, $msg2) if @val2;
printmsg(@val3, $msg3) if @val3;
printmsg(@val4, $msg4) if @val4;
printmsg(@val5, $msg5) if @val5;
printmsg(@val6, $msg6) if @val6;
Run Code Online (Sandbox Code Playgroud)
所以我写了下面的代码片段
for(my $i=1; $i < 6; $i++ ) {
printmsg(@val$i, $msg$i) if @val$i;
}
Run Code Online (Sandbox Code Playgroud)
它不起作用并且会出错.
在这些日子里,我一直在玩Java反射和.class
格式.我正在学习ldc
指导.
在JVM规范中我发现术语我不明白:符号引用,我有以下问题.
这是什么意思?
在哪里使用?
ldc
指令会加载符号引用?在Perl中,是否可以基于字符串创建全局变量?
例如,如果我有一个像这样的功能:
sub create_glob_var {
my ($glob_var_str) = @_;
# something like this ( but not a hash access).
our ${$glob_var_str};
};
Run Code Online (Sandbox Code Playgroud)
我称之为:
create_glob_var( "bar" );
Run Code Online (Sandbox Code Playgroud)
我如何修改create_glob_var
以实际创建一个名为的全局变量$bar
?
我的项目使用的是perl 5.8.5.
编辑
以下不起作用:
use strict;
BEGIN {
sub create_glob_var {
my ($glob_var_str) = @_;
no strict 'refs';
$$glob_var_str = undef; # or whatever you want to set it to
}
create_glob_var("bah");
};
$bah = "blah";
Run Code Online (Sandbox Code Playgroud)
生产:
Variable "$bah" is not imported at /nfs/pdx/home/rbroger1/tmp2.pl line 12. Global symbol "$bah" …
我正在寻找一个将打印符号名称的Git命令HEAD
.我正在使用这个命令
$ git name-rev --name-only HEAD
master
$ git checkout HEAD~2
$ git name-rev --name-only HEAD
master~2
Run Code Online (Sandbox Code Playgroud)
但是我注意到它不适用于新的存储库
$ git init
$ git name-rev --name-only HEAD
Could not get sha1 for HEAD. Skipping.
Run Code Online (Sandbox Code Playgroud)
我发现了这个解决方法
$ git init
$ git symbolic-ref --short HEAD
master
Run Code Online (Sandbox Code Playgroud)
但这对旧提交不起作用
$ git checkout HEAD~2
$ git symbolic-ref --short HEAD
fatal: ref HEAD is not a symbolic ref
Run Code Online (Sandbox Code Playgroud)
所以现在我有了这个,它涵盖了新的repos和旧的提交
$ git symbolic-ref -q --short HEAD || git name-rev --name-only HEAD
master
Run Code Online (Sandbox Code Playgroud)
我只是想知道,这是最好的方法吗?感觉这应该可以用一个命令.
我正在为我的工作重写从Perl5到Perl6的框架.在某些地方,我需要通过执行sub
他们可能提供的公众来从其他模块/类中收集信息; 或者他们可能没有.所以,有必要找出它是否sub
存在.当模块直接引用(Foo::<&my-sub>
)或字符串中的符号名称(&::("Foo"):: my-sub)时,这不是什么大问题.但为了简单起见,我想允许按原样传递模块名称(假设collector
是收集信息的方法):
self.collector( Foo );
Run Code Online (Sandbox Code Playgroud)
凡Foo
可能是以下几点:
module Foo {
use Bar;
use Baz;
our sub my-sub { Bar, 'Baz' }
}
Run Code Online (Sandbox Code Playgroud)
这就是我遗漏了Perl6语法中的重要内容,因为以下内容:
method collector ( $mod ) {
my $mod-name = $mod.WHO;
my @mods;
with &::($mod-name)::my-sub {
@mods.push: &$_();
}
}
Run Code Online (Sandbox Code Playgroud)
目前是我可以执行任务的唯一方法.
虽然我没有尝试过类型捕获.我想应该按预期工作.所以,问题更多的是扩展我的语法知识.
为什么以下代码段可以正常工作?使用这个可能有什么邪恶?但是说真的,有什么理由,根本${}
得到的代码被评估然后用作标量参考?
use strict;
no strict 'refs';
our $message = "Hello world!";
print "${ lc 'MESSAGE' }\n";
Run Code Online (Sandbox Code Playgroud) 我研究过 JVM(尤其是 JDK 8 版本),并且在研究类链接时,我还没有弄清楚从解析中的符号引用确定的直接内存地址在哪里。
\n\n解析有很多种,比如类型(类/接口)、字段、方法等,但我只是做了一个类的例子来简单解释。
\n\n在JVM规范中,有一些词。
\n\n\n\n\n5.1 运行时常量池\n Java 虚拟机维护一个每种类型的常量池 (\xc2\xa72.5.5),这是一种运行时数据结构,可用于传统编程语言的符号表的许多用途实现。\n 类或接口的二进制表示形式中的constant_pool 表(\xc2\xa74.4) 用于在创建类或接口(\xc2\xa75.3) 时构造运行时常量池。运行时常量池中的所有引用最初都是符号性的。
\n
规范中说,所有引用首先都是符号引用。
\n\n这是一个示例主类。
\n\npublic class Main {\n public static void main(String[] args) {\n Object obj = new Object();\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n这是主类的常量池信息。
\n\nConstant pool:\n#1 = Methodref #2.#12 // java/lang/Object."<init>":()V\n#2 = Class #13 // java/lang/Object\n#3 = Class #14 // Main\n#4 = Utf8 <init>\n#5 = Utf8 ()V\n#6 = Utf8 Code\n#7 = Utf8 LineNumberTable\n#8 = Utf8 main\n#9 = Utf8 …
Run Code Online (Sandbox Code Playgroud) 我想把我的变量写成其他变量之间的操作.
例如,如果我把a = c + b
那个值保持在里面的值是c和b之间的和的操作的数值结果.
如果c = 4且b = 2那么,a保持的值是6.
但我希望a保持符号表达式而不是数值.每次我在命令窗口中写一个,matlab cacht c的数值和worspace变量的b的数值,并将它们相加.
通常,如果你写一个,matlab会显示这个变量中的数值.有谁知道如何做到这一点?
对于所有这些愚蠢的问题感到抱歉,我已经进入了Perl编程,我发现很难像Perl程序员一样思考.
今天愚蠢的问题:我使用id字段作为键将管道分隔文件加载到哈希中,就像这样
#open file
my %hash;
while (<MY_FILE>) {
chomp;
my ($id, $path, $date) = split /\|/;
$hash{$id} = {
"path" => $path,
"date" => $date
};
}
Run Code Online (Sandbox Code Playgroud)
然而,有几次,当我真正需要键作为路径时,因为无论出于何种原因(并且不能,它无法更改),id不是唯一的,所以我有一个明智的想法,我可以把把它全部放到子程序中并传递变量的名称作为它的关键,有点像:
load_hash("path");
sub load_hash {
my $key = shift;
#do stuff, and then in while loop
$hash{${$key}} = #and so on
}
Run Code Online (Sandbox Code Playgroud)
但是在perldb中,x $ {$ key}始终为undef,尽管x $ {path}会在$ path中打印该值.
有没有办法做我想做的事情?
TIA
如果我有一个变量,$bar
它等于字符串"foo"
并且$foo
等于0xdead
,那么$foo
当我只有变量名的字符串时,如何得到值?
本质上,我想在全局命名空间上执行一种指针间接寻址或在全局命名空间上执行哈希查找.
以下不起作用:
perl -e 'my $foo=0xdead; my $bar ="foo"; print ${$bar}."\n";'
Run Code Online (Sandbox Code Playgroud)
它只打印换行符.
我知道我可以很容易地做类似的事情
sub sin {
sin($_[0]);
}
Run Code Online (Sandbox Code Playgroud)
并象征性地引用我需要的每个函数,但我想知道是否有办法做类似的事情
{$foo}(123);
Run Code Online (Sandbox Code Playgroud)
与
&{$foo}(123);
Run Code Online (Sandbox Code Playgroud)
哪个有效,但不适用于核心功能.
谢谢.
我是Perl的新手,我知道你可以按名称调用函数,如下所示:
&$functionName();
.但是,我想按名称使用数组.这可能吗?
长码:
sub print_species_names {
my $species = shift(@_);
my @cats = ("Jeffry", "Owen");
my @dogs = ("Duke", "Lassie");
switch ($species) {
case "cats" {
foreach (@cats) {
print $_ . "\n";
}
}
case "dogs" {
foreach (@dogs) {
print $_ . "\n";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
寻求类似于此的更短代码:
sub print_species_names {
my $species = shift(@_);
my @cats = ("Jeffry", "Owen");
my @dogs = ("Duke", "Lassie");
foreach (@<$species>) {
print $_ . "\n";
}
}
Run Code Online (Sandbox Code Playgroud)