小编vle*_*lee的帖子

如何在脚本/函数中检查已安装的MATLAB工具箱?

如何在脚本/函数中检查已安装的MATLAB工具箱?(检查工具箱版本也会很好!)当有人试图在没有必需工具箱的情况下运行脚本时,这可以提供快速有用的错误消息.

想到的一个快速的,虽然粗略的解决方案是解析ver命令的文本输出.我想知道是否有更好的方法.

一些快速搜索显示ver product或参数的license功能'test'可能是有用的,但我找不到工具箱名称(即.'Image Processing Toolbox')到产品名称(即.'control')或功能名称(即.image_toolbox)的映射.

此外,当我跑步时license('inuse'),我只收到以下内容:

>> a = license('inuse'); a

a = 

    feature: 'matlab'
       user: <username>

我希望有一个我可以访问的许多工具箱的列表.

试图通过尽早测试同事脚本来提出这个问题.不幸的是,它需要我目前缺乏的图像处理工具箱.一个有用的错误消息将节省时间来尝试诊断问题.现在我将在测试之前等待编译版本.

matlab

34
推荐指数
3
解决办法
9万
查看次数

确定Perl代码引用的子例程名称

如何确定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)

reflection perl reference

20
推荐指数
4
解决办法
4166
查看次数

在Perl中,检查json解码的布尔值

解码的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文档中我了解了以下三种方法:

  • JSON :: is_bool
  • JSON ::真
  • JSON ::假

但是,由于某些愚蠢的原因,我不知道如何确定'boolean_field'的值$decoded_json是真还是假.

(对不起,这是一个非常基本的问题;它一直让我感到沮丧!)

perl json boolean

15
推荐指数
1
解决办法
8465
查看次数

emacsclient窗口焦点

运行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)

emacs emacsclient

12
推荐指数
2
解决办法
2330
查看次数

如何将具有UTF-8文件名的文件复制到Windows上的Perl中的另一个UTF-8文件名?

例如,给定一个空文件???.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)

perl filenames utf-8

7
推荐指数
1
解决办法
4589
查看次数

如何通过Vista 64中的文件关联传递命令行参数?

如何在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 64-bit argument-passing windows-vista

5
推荐指数
2
解决办法
1万
查看次数

如何在Perl中将多个时区的unix日期输出转换为UTC?

在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.

任何帮助将不胜感激.

perl timezone date

5
推荐指数
2
解决办法
2680
查看次数

stdout到file1,stderr到file2,都正确交错到stdout和文件

鉴于第三方计划,如何同时进行:

  1. 将stdout写入z.stdout
  2. 写stderr到z.stderr
  3. 适当地传递退出代码
  4. 以正确的交错顺序写入stdout

这是我一直在使用的测试程序(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)

bash redirect stdout stderr tee

5
推荐指数
1
解决办法
1241
查看次数

使用Getopt :: Long检测不明确的选项

有没有一种简单的方法来检测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 options getopt-long ambiguous

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

如何从LWP :: Simple的getstore()确定下载速度和数量?

使用perl模块LWP :: Simple时,有一种简单的方法可以确定单个getstore()调用下载的速度和数量吗?这对于观察大文件下载的状态很有用.

在我的头脑中,一种方法是:

  1. 存储当前时间(time0)
  2. 在新进程中运行getstore
  3. 轮询已知的目标文件
    • 下载的数量将是当前文件大小(大小)
    • 下载速度会(size/current_time - time0)

我想知道是否有更简单的方法.

欢迎替代建议(也许我应该使用不同的模块?)

perl download lwp

2
推荐指数
1
解决办法
1558
查看次数

使用dbix-class加入子查询?

给出两个表:(表示关键问题的传入大大减少/简化的示例)

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)

sql perl subquery dbix-class

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