有没有办法判断哈希引用是否指的是符号表?
也就是说,该功能怎么可能
sub foo {
my ($hashref) = @_;
...
}
Run Code Online (Sandbox Code Playgroud)
知道它是否被调用为
foo( \%main:: )
Run Code Online (Sandbox Code Playgroud)
而不是
foo( \%main )
Run Code Online (Sandbox Code Playgroud)
?
应用程序是一个有时tie是哈希变量的函数,但我想避免尝试绑定一个符号表.
我试图在一些文件夹和任何子文件夹中找到所有PDF文件,只是在终端中,而不是在脚本中.我对linux也很陌生,所以如果我错过任何明显的事情,或者对诊断我的特定问题至关重要,请道歉.
我正在使用bash 4.1.5(1)-release(i486-pc-linux-gnu),并且在google上做了一些关于glob和extglob表达式的讨论,看来我应该使用的语法是
$ ls **.pdf
Run Code Online (Sandbox Code Playgroud)
然而,这没有任何结果,因为没有文件匹配*.pdf当前文件夹中的模式./; 它似乎想读**作*:
ls: cannot access **.pdf: No such file or directory
Run Code Online (Sandbox Code Playgroud)
在其他地方有PDF,在1到5深的子文件夹中(特别是在每个子文件夹1深),其中一些我可以通过检查看到
$ ls */*.pdf
Run Code Online (Sandbox Code Playgroud)
因此,ls似乎工作正常.它的手册似乎不是很有帮助,因为我所能看到的可能是任何使用我们ls用-R旗帜调用的东西,这在上述任何一种情况下都没有解决问题.
我尝试使用extglob模式(确保打开它们shopt).我可以看到我的深度-1文件有ls */*?(.)pdf,但我看不到任何与ls .*(/*)pdf或ls .*(/*).pdf,甚至那里有一个PDF文件子目录中.
我在其他地方(参考.gitignoregit存储库中的文件)中读到该**模式并不适用于所有人.
这可能会影响我,我如何解决它(理想情况下没有超级用户权限)?可能这个(或一些相关问题)也会影响extglob功能吗?
我一直在使用zsh globbing来执行以下命令:
vim **/filename
vim *.html.erb
Run Code Online (Sandbox Code Playgroud)
等等,但当我输入类似的东西时:
find . -name *mobile*
Run Code Online (Sandbox Code Playgroud)
我收到了回复:
zsh: no matches found: *mobile*
Run Code Online (Sandbox Code Playgroud)
为什么?
我zsh在尝试使用logcat时遇到了以下错误.
即,输入时:
adb logcat *:D
Run Code Online (Sandbox Code Playgroud)
我在zsh中收到以下错误
zsh: no matches found: *:D
Run Code Online (Sandbox Code Playgroud)
我不得不逃避*:
adb logcat \*:D
Run Code Online (Sandbox Code Playgroud)
使用bash时,我没有收到以下错误.
为什么会这样?
我知道通配符*(单独)将以这样一种方式扩展,即它意味着"当前文件夹中的所有非隐藏文件",其中隐藏文件是以句点为前缀的文件.
我认为有两个用例是有用的,但我不知道如何正确地做:
你怎么能为......"当前文件夹中的所有文件,包括隐藏文件,但不包括.或.."?
你怎么能为......"所有隐藏文件(和隐藏文件)在当前文件夹中,但不包括.或.."?
我想编写一个实用程序函数/模块,它将为字符串提供简单的通配符/ glob匹配.我没有使用正则表达式的原因是用户将最终使用某种配置文件提供匹配的模式.我找不到任何这样稳定的宝石 - 试过小丑,但是设置有问题.
我正在寻找的功能很简单.例如,给定以下模式,以下是匹配:
pattern | test-string | match
========|=====================|====================
*hn | john, johnny, hanna | true , false, false # wildcard , similar to /hn$/i
*hn* | john, johnny, hanna | true , true , false # like /hn/i
hn | john, johnny, hanna | false, false, false # /^hn$/i
*h*n* | john, johnny, hanna | true , true , true
etc...
Run Code Online (Sandbox Code Playgroud)
我希望这样做尽可能高效.我考虑过从模式字符串创建正则表达式,但这在运行时似乎效率很低.有关此实施的任何建议吗?谢谢.
编辑:我正在使用ruby 1.8.7
为了简短起见,我写了一个访问控制系统.
该系统的要求之一是通过将其与模式匹配来检查是否可以访问规范/规范化路径.
首先想到的是PREG,问题是,模式是基于文件的,即类似于接受的模式glob().基本上,它只是包含?(匹配一个任意字符)或*(匹配任何字符)的模式.
所以简单来说,我需要glob()在PHP上重新创建匹配功能.
示例代码:
function path_matches($path, $pattern){
// ... ?
}
path_matches('path/index.php', 'path/*'); // true
path_matches('path2/', 'path/*'); // false
path_matches('path2/test.php', 'path2/*.php'); // true
Run Code Online (Sandbox Code Playgroud)
一个可能的解决方案是转换$pattern为正则表达而不是使用preg_match(),有没有其他方法?
注意:我不能使用正则表达式的原因是模式将由非程序员编写.
我是一名Android开发人员,最近在SQLite中遇到了GLOB子句.我不明白为什么我们需要GLOB,因为LIKE已经到位了.
这两个子句都有通配符来表示单个和多个字符.唯一的区别是GLOB区分大小写.
但这就是全部吗?LIKE是一个不好或不恰当的选择吗?在任何情况下我们绝对必须使用GLOBE vs LIKE,反之亦然?
我的python代码在下面的示例中正常工作.我的代码组合了一个CSV文件目录并匹配标题.但是,我想更进一步 - 如何添加一个附加所用CSV文件名的列?
import pandas as pd
import glob
globbed_files = glob.glob("*.csv") #creates a list of all csv files
data = [] # pd.concat takes a list of dataframes as an agrument
for csv in globbed_files:
frame = pd.read_csv(csv)
data.append(frame)
bigframe = pd.concat(data, ignore_index=True) #dont want pandas to try an align row indexes
bigframe.to_csv("Pandas_output2.csv")
Run Code Online (Sandbox Code Playgroud) 我想在 Windows 上的 raku 中执行以下操作
raku -n -e ".say if /mydatabegin/;" *.file
Run Code Online (Sandbox Code Playgroud)
无法打开文件 C:\..\*.file: 参数无效
glob 不被解释为 glob。我认为这是因为 Windows 要求你的程序自己进行通配?那么是否有一个预处理指令或函数,甚至是我可能错过或重定向的开关,或者允许扩展 glob 同时保持 -n (或 -p)和 -e 开关的简单性的东西?
显然,我可以通过删除 -n (或 -p)将其更改为完整程序,只需使用 -e 指定 main 并循环 glob 结果。但我真的很喜欢-n。
附言。我实际上只是在学习 raku,并且很惊讶这并没有开箱即用。因此,具有简单语法的完整程序的示例也可以工作。但我真的很喜欢-n..
编辑:回复@chenyf
raku -e ".say for $*ARGFILES" *.file
Run Code Online (Sandbox Code Playgroud)
同样的错误。有关的:
raku -e ".say for $*ARGFILES.lines" *.file
Run Code Online (Sandbox Code Playgroud)
同样的错误。
raku -e "use IO::Glob; .say for glob('*.file')"
Run Code Online (Sandbox Code Playgroud)
按预期工作!扩展:
raku -e "use IO::Glob; .say for glob('*.file').lines"
Run Code Online (Sandbox Code Playgroud)
对于“IO::Glob”类型的调用者没有这样的方法“lines”
越来越接近——也许对此进行扩展是一个足够好的解决方法。但回到一线荣耀的尝试:
raku -e "use IO::Glob; .say for glob($*ARGFILES)" test.file
Run Code Online (Sandbox Code Playgroud)
无法解析调用者 …