如何在脚本/函数中检查已安装的MATLAB工具箱?(检查工具箱版本也会很好!)当有人试图在没有必需工具箱的情况下运行脚本时,这可以提供快速有用的错误消息.
想到的一个快速的,虽然粗略的解决方案是解析ver命令的文本输出.我想知道是否有更好的方法.
一些快速搜索显示ver product或参数的license功能'test'可能是有用的,但我找不到工具箱名称(即.'Image Processing Toolbox')到产品名称(即.'control')或功能名称(即.image_toolbox)的映射.
此外,当我跑步时license('inuse'),我只收到以下内容:
>> a = license('inuse'); a
a =
feature: 'matlab'
user: <username>
我希望有一个我可以访问的许多工具箱的列表.
试图通过尽早测试同事脚本来提出这个问题.不幸的是,它需要我目前缺乏的图像处理工具箱.一个有用的错误消息将节省时间来尝试诊断问题.现在我将在测试之前等待编译版本.
如何确定Perl代码引用的子例程名称?我还想区分命名和匿名子程序.
感谢这个问题,我知道如何打印代码,但我仍然不知道如何获得名称.
例如,我想从以下内容中获取'inigo_montoya':
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Deparse = 1;
my $sub_ref = \&inigo_montoya;
print Dumper $sub_ref;
# === subroutines ===
sub inigo_montoya {
print <<end_quote;
I will go up to the six-fingered man and say, "Hello. My name is Inigo
Montoya. You killed my father. Prepare to die."';
end_quote
}
Run Code Online (Sandbox Code Playgroud) 解码的JSON布尔值是对象:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use JSON;
my $json_string = '{"boolean_field":true}';
my $decoded_json = from_json $json_string;
print Dumper $decoded_json;
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = {
'boolean_field' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' )
};
Run Code Online (Sandbox Code Playgroud)
从JSON.pm文档中我了解了以下三种方法:
但是,由于某些愚蠢的原因,我不知道如何确定'boolean_field'的值$decoded_json是真还是假.
(对不起,这是一个非常基本的问题;它一直让我感到沮丧!)
运行emacsclient后如何始终如一地控制窗口焦点?
目前,焦点取决于我是否已经运行emacs服务器.当emacsclient调用另一个编辑器时,焦点将转移到新的emacs窗口.当emacsclient连接到现有的emacs服务器时,焦点不会移位(即它停留在我的putty客户端上).
我想一直关注emacs窗口,因为我打开文件后通常会去emacs.
任何帮助将不胜感激!
笔记
版本信息
emacs: 21.4.1
emacsclient: 21.4
client os: Windows XP Service Pack 3
x server: Exceed 11.0.0.0
Run Code Online (Sandbox Code Playgroud)
我的.bash_profile的相关部分
# a wrapper is needed to sandwich multiple command line arguments in bash
# 2>/dev/null hides
# "emacsclient: can't find socket; have you started the server?"
emacs_wrapper () {
if [ 0 -eq $# ]
then
emacsclient -n -a emacs ~/notes.txt 2>/dev/null &
else
emacsclient -n -a emacs $* &
fi
}
alias x="emacs_wrapper"
Run Code Online (Sandbox Code Playgroud)
另外,在我的.emacs结束时,我有
(server-start)
Run Code Online (Sandbox Code Playgroud)
我目前的解决方法是一个简单的autohotkey脚本,它专注于我的第一个Exceed窗口
^+x:: …Run Code Online (Sandbox Code Playgroud) 例如,给定一个空文件???.txt,我如何制作一个名为???.txt.copy?的副本?
我的第一个破解设法访问该文件并创建新文件名,但生成了副本テスト.txt.copy.
这是我的第一次破解:
#!/usr/bin/env perl
use strict;
use warnings;
use English '-no_match_vars';
use File::Basename;
use Getopt::Long;
use File::Copy;
use Win32;
my (
$output_relfilepath,
) = process_command_line();
open my $fh, '>', $output_relfilepath or die $!;
binmode $fh, ':utf8';
foreach my $short_basename ( glob( '*.txt') ) {
# skip the output basename if it's in the glob
if ( $short_basename eq $output_relfilepath ) {
next;
}
my $long_basename = Win32::GetLongPathName( $short_basename );
my $new_basename = $long_basename …Run Code Online (Sandbox Code Playgroud) 如何在Vista 64中通过文件关联传递命令行参数?
我最近建立了一台运行Vista Ultimate 64位的PC.我注意到由于没有传递命令行参数,我传输的几个Perl脚本失败了.作为一个简单的测试,我写了以下(foo.pl):
#!/usr/bin/perl -w
use strict;
my $num_args = $#ARGV + 1;
print "${num_args} arguments read\n";
print "$^X\n" # to see what was being used
Run Code Online (Sandbox Code Playgroud)
运行"foo.pl 1 2 3"会产生不良影响:
0 arguments read
C:\strawberry\perl\bin\perl.exe
Run Code Online (Sandbox Code Playgroud)
运行"perl foo.pl 1 2 3"预计会产生:
3 arguments read
C:\strawberry\perl\bin\perl.exe
Run Code Online (Sandbox Code Playgroud)
在我的旧Windows XP PC上,两个调用都返回了3个参数.我在这里记录了更多我的侦探(win32.perl.org wiki talk),但我还没有找到一个有效的解决方案.
我也试过ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi无济于事.
任何帮助,将不胜感激.这让我很沮丧.
在Perl中,如何有效地解析unix的date命令的输出,考虑时区,还转换为UTC?
我在stackoverflow上读过许多类似的问题,但似乎很少考虑解析多个时区.相反,他们似乎手动设置时区并假设它保持固定.
# Example Input Strings:
my @inputs = (
'Tue Oct 12 06:31:48 EDT 2010',
'Tue Oct 12 07:49:54 BST 2010',
);
Run Code Online (Sandbox Code Playgroud)
我尝试了以下无济于事:
foreach my $input ( @inputs ) {
my $t = Time::Piece->strptime( $input,
'%a %b %d %T %Z %Y' );
print $t->cdate, "\n";
}
Run Code Online (Sandbox Code Playgroud)
似乎问题是时区(%Z).另外,Time :: Piece中似乎不存在时区字段,这需要我编写自定义代码以转换为UTC,这似乎是错误的.
上下文:我正在尝试从使用unix date命令获取时间戳的各种源解析旧日志.理想情况下,我想将所有时间戳转换为UTC.
任何帮助将不胜感激.
鉴于第三方计划,如何同时进行:
这是我一直在使用的测试程序(delayed_interleaved_stdout_stderr.pl):
#!/usr/bin/env perl
use strict;
use warnings;
# fixme: debug, uncomment to force stdout flushing
# use English '-no_match_vars';
# $OUTPUT_AUTOFLUSH = 1;
# use sleeps to simulate delays and test buffering
use Time::HiRes 'sleep';
foreach my $num ( 0..9 ) {
if ( 0 == $num % 2 ) {
print STDOUT $num, ":stdout\n";
}
else {
print STDERR $num, ":stderr\n";
}
sleep 0.25;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经能够做1,2,3:
( set -o pipefail; \
( set -o …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来检测Perl模块Getopt :: Long的模糊选项?
例如:
#!/usr/bin/env perl
# test ambiguous options
use Getopt::Long;
my $hostname = 'localhost';
GetOptions( help => sub { print "call usage sub here\n"; exit },
'hostname=s' => \$hostname,
);
print "hostname == '$hostname'\n";
Run Code Online (Sandbox Code Playgroud)
默认情况下,Getopt :: Long支持唯一缩写.对于非唯一缩写,会抛出警告并且脚本继续以其快乐的方式继续.
./t.pl -h not_localhost
Option h is ambiguous (help, hostname)
hostname == 'localhost'
Run Code Online (Sandbox Code Playgroud)
我希望我的脚本立即死于不明确的选项,以便立即通知并防止它以意外的默认值运行.
使用perl模块LWP :: Simple时,有一种简单的方法可以确定单个getstore()调用下载的速度和数量吗?这对于观察大文件下载的状态很有用.
在我的头脑中,一种方法是:
我想知道是否有更简单的方法.
欢迎替代建议(也许我应该使用不同的模块?)
给出两个表:(表示关键问题的传入大大减少/简化的示例)
app_data表示可以订阅的应用程序
id app_name
1 apple
2 berry
3 cherry
Run Code Online (Sandbox Code Playgroud)
app_sub将电子邮件地址映射到应用程序
id email
1 alex
2 bob
2 coby
Run Code Online (Sandbox Code Playgroud)
我想从单用户的角度生成一个表,显示当前用户订阅的应用程序,而不是.
例如,从Alex的角度来看,我想得到:
desired_table
id app_name is_subscribed
1 apple true
2 berry false
3 cherry false
Run Code Online (Sandbox Code Playgroud)
以下纯SQL查询似乎没问题:
select id, app_name, email
from app_data left join ( select *
from app_sub
where email='alex'
) as subquery
on app_name.id=app_data.id;
Run Code Online (Sandbox Code Playgroud)
但是我很难在dbix-class中工作.
或者,我试图消除子查询,如下所示:
$app_data_resultset->search( { -or => [ { email => 'alex' },
{ email => undef },
],
},
{ select => [ …Run Code Online (Sandbox Code Playgroud)