Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 28

10
votes
answers
56 views
+10

如果数据中不存在分隔符值,请删除双引号

给出一个输入文件,每行包含每列和回车/换行符号的引号。

  • 如果该行包含新行,则必须附加在引号内的同一行中,例如第1行

  • 如果分隔符(,)不存在,则删除每列的双引号。 < / li>

  • 删除回车字符即(^ M)

    举例说明,给定以下输入文件

     < code>“name”,“address”,“age”^ M“ram”,“abcd,^ M def”,“10”^ M“abhi”,“xyz”,“25”^ M“ad”,“ ram,John“,”35“^ M  

    我想通过sed / perl / awk脚本/ oneliner获取以下输出。

      name,address,age ram,“abcd,def”,10 abhi, xyz,25 ad,“ram,John”,35   

    到目前为止我已经厌倦的解决方案用于附加上一行

      sed'/ ^替换control-m字符的[^“] *”[^“] * $ / {N; s / //}'sample.txt   

     < code> perl -pne's /  r // g'sample.txt   

    但是我没有达到我在下面要求的最终输出xyz,25 ad,“ram,John”,35

    到目前为止我已经厌倦的解决方案用于附加上一行

      sed'/ ^替换control-m字符的[^“] *”[^“] * $ / {N; s / //}'sample.txt   

     < code> perl -pne's /  r // g'sample.txt   

    但是我没有达到我在下面要求的最终输出xyz,25 ad,“ram,John”,35

    到目前为止我已经厌倦的解决方案用于附加上一行

      sed'/ ^替换control-m字符的[^“] *”[^“] * $ / {N; s / //}'sample.txt   

     < code> perl -pne's /  r // g'sample.txt   

    但是我没有达到我在下面要求的最终输出s / r // g'sample.txt

    但我没有达到我在下面要求的最终输出s / r // g'sample.txt

    但我没有达到我在下面要求的最终输出

沙发
+50

使用库来解析CSV文件。除了总是想要使用库之外,这里还有非常具体的原因,包括嵌入式换行符和分隔符。

在Perl中,一个好的库是 Text :: CSV (一个包装器)对于 Text :: CSV_XS )。基本示例

 使用警告; 用严格; 使用功能'说'; 使用Text :: CSV; 我的$ file = shift或die“用法:$ 0 file.csv”; my $ csv = Text :: CSV-&gt; new({binary =&gt; 1,auto_diag =&gt; 1}); 打开我的$ fh,'&lt;',$ file或die“无法打开$ file:$!”; while(my $ row = $ csv-&gt; getline($ fh)){s / * // g for @ $ row; $ csv-&gt;说(* STDOUT,$ row); } < / code>  

评论

  • 构造函数中的 binary 选项允许在数据中嵌入换行符

  • 一旦将一行读入数组引用 $ row ,我将使用简单的正则表达式删除每个字段中的换行符。无论如何,请根据需要对此进行改进

  • 处理后的输出打印到 STDOUT ,但是您可以打开输出文件然后传递该文件句柄到(或旧模块版本中的 print )所以输出直接转到那个文件

    上面打印,提供的样本输入

     name,address,age ram,“abcd,
         
    			
            
板凳
+20

这可能适合你(GNU sed):

  sed':a; / [^“] $ / {N; s / //; ba}; s /”( [^“,] *)”/ 1 / g'文件  

解决方案分为两部分:

  1. 加入折线来制作整个。
  2. 删除不包含逗号的字段周围的双引号。

    如果当前行不以双引号结尾,请追加下一行,删除换行符并重复。否则:删除不包含双引号或逗号的字段周围的双引号。

    NB假设该字段不包含带引号的双引号。如果是这种情况,则需要修改第一步的条件,并且需要满足字段内的双引号。

谢谢你的解决方案。如果我不确定将来会有多少列。在这种情况下,你提供的解决方案是不可行的。 - user1485267 17小时前

@ user1485267我过度思考了这个问题,看到修改后的简化解决方案。 - potong 17小时前

地板
+20

FPAT 是使用 gnu awk 的方法,它处理逗号分隔的文件。

  1. 删除^ m
  2. 简洁线条
  3. 删除qutes

      dos2unix sample.txt awk'{printf“%s”(/,$ /?“”:“”),$ 0}'sample.txt&gt; tmp&amp;&amp; mv tmp sample.txt“name”,“address”,“age”“ram”,“abcd,def”,“10”“abhi”,“xyz”,“25”“ad”,“ram,John”, “35”awk -v FPAT =“([^,] +)|(”[^“] +”)“ -  v OFS =,'{for(i = 1; i&lt; = NF; i ++)if($我!?“,”)$ i = substr($ i,2,length($ i)-2)} 1'pample.txt名称,地址,年龄公羊,“abcd,def”,10 abhi,xyz,25 ad,“ram,John”,35   

    一气呵成:

      dos2unix sample.txt&amp;&amp; awk'{printf“%s”(/,$ /?“”:“”),$ 0}'sample.txt | awk -v FPAT =“([^,] +)|(”[^“] +”)“ -  v OFS =,'{for(i = 1; i&lt; = NF; i ++)if($ i!? “,”)$ i = substr($ i,2,length($ i)-2)} 1'  

    通常你设置Filed Separator FS或F 告诉如何分隔字段。 FPAT =“([^,] +)|(”[^“] +”)“ FPAT告诉使用正则表达式的字段是什么样的。此正则表达式很复杂,通常与CSV一起使用。

    • (i = 1; i&lt; = NF; i ++)

谢谢你的详细解释。你能解释一下你申请的最后一个模式吗?awk -v FPAT =“([^,] +)|(”[^“] +”)“ - v OFS =,'{for(i = 1; i <= NF; i ++)if($ i!〜 “,”)$ i = substr($ i,2,length($ i)-2)} 1'cample.txt - user1485267 20小时前

@ user1485267添加了更多信息 - Jotne 20小时前

谢谢(你的)信息。但是使用第三个功能它不起作用我得到了相同的ouptut我在第二步中实现 - user1485267 19小时前

目前正在尝试的awk版本是GNU Awk 3.1.7 - user1485267 19小时前

@EdMorton这就是为什么我加了两个awk :) - Jotne 7小时前

4楼
+10

使用 perl ,请尝试以下操作:

  perl -e'while(&lt;&gt;){s / $ //; #remove尾随CR代码$ str。= $ _; } while($ str =?/(“((”“)| [^”])*“?)|((^ |(?&lt; =,))[^,] *((?=,)| ))/ g){$ _ = $&amp ;; if(/,/){#the element contains“,”s / // g;#然后删除换行符如果有的话}其他{#否则删除周围的双引用s / ^“// s; s /“$ // s;} push(@ary,$ _); if(/ $ /){#newline终止元素print join(”,“,@ary); @ary =();}}' sample.txt   

输出:

 姓名,地址,年龄公羊,“abcd,def”,10 abhi,xyz,25 ad,“ram,约翰“,35 <
     
			
        
11
votes
answers
50 views
+10

可以无限时间使用Promise.in吗?

有没有直接的方法来使用 Promise.in (或其他子/方法/类)来实现无限期的时间?换句话说,Promise永远不会被解决。

目前我正在检查 $ time ,当保留承诺以查看是否请求了无限期时间(由否定或0表示)

是不是一个可怕的解决方案,但是有更多的惯用方法来实现这个目标吗?

  my $ time = 0; 反应{每当Promise.in($ time){#check如果时间是0,如果$ time&gt; 0; 每当信号(SIGINT){完成; } #whenever Supply ... {#}}  
    
        
沙发
+50
+50

您实际上可以将 Inf 传递给Promise.in,如下所示:

  await Promise.in(Inf); 说“永远不会发生”;  
     
			
        
+40
 只要Promise.new {  

几乎给你一个永远不会保留的承诺,所以关联的代码永远不会被激活。不知道为什么你会这样做。

+20

如果你想要一个永远不会实现的承诺,只需运行 Promise.new 即可获得一个承诺。

有人仍然可以调用 .keep 承诺,除非你获得誓言以防止这种情况发生。

0
votes
answers
104 views
+10

任何方式來獲取列的超鏈接到谷歌電子表格上的另一列?

0

我從一個網站複製公司名稱列表,他們每個人都有它的超鏈接。任何方式來獲取列的超鏈接到谷歌電子表格上的另一列?

但現在我想貼在一個谷歌電子表格的B列和列中的鏈接列表中的名稱C.

the sample spreadsheet shows here

B欄顯示的姓名和C柱表示,如http其鏈接: // .....

的= HYPERLINK函數的語法如隨後

HYPERLINK(URL,[鏈接標籤])

有沒有什麼辦法可以讓[link_label]成爲鏈接url本身?

或者是否有任何其他方式列出列上的所有超鏈接?

沙发
0
0

Google函數中的方括號表示該參數是可選的。如果省略[link_label],HYPERLINK默認顯示鏈接本身。

換句話說,= HYPERLINK(「www.example.com」)將顯示爲www.example.com

See Google's documentation

0
votes
answers
56 views
+10

關於perl的 W

1

的含義根據該文檔關於perl的 W

W [3]匹配一個 「字」 的字符(字母數字加上 「_」,加 其他連接器標點字符加的Unicode引號)

我不明白什麼是「加上其他連接器標點符號加上Unicode標記」,該文檔似乎沒有說。什麼是w真的?

沙发
0
5

有以Unicode 9.0.0 119821個匹配字符(包括在Perl 5.26.0):

$ unichars -a -u 'w' | wc -l 
119821 

您可以使用unichars列出匹配的屬性的字符,你可以使用uniprops來列出與某個字符匹配的屬性。兩者均由Unicode::Tussle提供。


perluniprops文件pw是短期的p{XPosixWord}[1],所以這是一個應該進行磋商,以瞭解更多有關w和其他性質的文件。

足夠-最近perluniprops [2]文檔w包括以下屬性的並集的:

  • XPosixWord
    • XPosixAlnum:字母和十進制數。
      • Alphabetic
      • Decimal_Number:小數位數。
    • Mark
    • Connector_Punctuation
    • Join_Control

驗證:

$ diff -u  
    <(unichars -a -u 'w')  
    <(unichars -a -u '[p{Alphabetic}p{Decimal_Number}p{Mark}p{Connector_Punctuation}p{Join_Control}]')  
     && echo "No difference." 
No difference. 

詳細地:

  • 定製派生屬性XPosixWord
    • 定製派生屬性XPosixAlnum:字母和十進制數。
      • 派生屬性Alphabetic
        • 派生屬性Uppercase
          • 普通類Uppercase_LetterLu
          • Other_Uppercase[3]
        • 派生p roperty Lowercase
          • 普通類Lowercase_LetterLl
          • Other_Lowercase[3]
        • 普通類Titlecase_LetterLt
        • 普通類Modifier_LetterLm
        • 常規類別Other_LetterLo
        • 普通類Letter_NumberNl
        • Other_Alphabetic[3]
      • 普通類Decimal_NumberNd):十進制數字。
    • 普通類MarkM):
      • 普通類Spacing_MarkMc
      • 普通類Enclosing_MarkMe
      • 普通類Nonspacing_MarkMn
    • 一般Connector_Punctuation類別(Pc
    • Join_Control

  1. 當使用/uuse feature qw(unicode_strings);
  2. 5.28將成爲第一個版本,正確地記錄XPosixWord(因爲在5.18中添加了Join_Control字符)。
  3. 未由Perl公開。
+0

嗨@ikegami。 「unichars」在哪裏?我無法使用apt進行安裝。然後我下載Unicode :: Tussle,有一個unichars腳本。但是'unichars -a -u' w''不起作用 – user15964

+0

該文檔已修復爲blead:https://perl5.git.perl.org/perl.git/commitdiff/9b79e9e3431d11e79a4f85268f70130b7b4369f6 – melpomene

+0

@ user15964,你是什麼意思是「不起作用」?請記住'unichars'可以很慢,特別是'-a'和'-u'。它確實將regex參數應用於每個可能的Unicode字符0x110000。 – ikegami

板凳
0
3

您的報價是perldoc perlre。相應的腳註表示:

它說:

w單個字母數字字符(字母字符,或一個十進制數)相匹配;或連接標點符號,如下劃線(「_」);或附加到其中之一的「標記」字符(如某種口音)。它不匹配整個單詞。要匹配整個單詞,請使用w+。這與匹配英文單詞不同,但在ASCII範圍內,它與一串Perl標識符字符相同。

它也說(如果Unicode規則有效),w等於p{Word}perldoc perluniprops

p{Word}    p{XPosixWord} 

p{Word}p{XPosixWord}的別名。

p{XPosixWord}   w, including beyond ASCII; = p{Alnum} + pM + p{Pc} (Short: p{Word}) 

p{XPosixWord}p{Alnum},pMp{Pc}的聯合。

這裏p{Alnum}匹配任何「字母和(十進制)數字」字,pM匹配任何字符,其一般類別爲「標記」,並p{Pc}匹配它的基本類別是「連接符標點」任何字符。

有關這些類別中的字符的完整列表,我將不得不推遲到Unicode。

+0

@ikegami我很確定「Word」不是Unicode屬性。 – melpomene

+0

非常感謝您的詳細解釋。我沒有想到它會涉及到這麼多事情。但無論如何,我們是否可以簡單地打印' pM'和' p {Pc}'。此刻,我仍然無法理解屬於' pM'或' p {PC}'的字符是什麼樣子,看起來像 – user15964

0
votes
answers
66 views
+10

服務器錯誤或空白頁與CGI腳本

0

我有這麼一小撮代碼,出於某種原因,從http://localhost/cgi-bin/sysinfo.sh運行時無法執行。我在CentOS 7的虛擬機上,我會盡我所能的幫助。我似乎無法得到這些指示,但是他們在Vi中是正確的。服務器錯誤或空白頁與CGI腳本

#!/bin/bash 
echo -e "Content-type: text/html

" 
echo " 
<html> 
<head> 
    <title>Bash as CGI</title> 
</head> 
<body> 
<h3>General system information for host $(hostname -s).    </h3> 
<h4>Memory Info</h4> 
<pre> $(free -m) </pre> 
<h4>Disk Info:</h4> 
<pre> $(df -h) </pre> 
<h4>Logged in user</h4> 
<pre> $(w) </pre> 
<hr> 
Information generated on $(date) 
</body> 
</html> 

當我將它作爲shell腳本運行時... html標籤都隨着命令的輸出一起顯示。

內容類型:文本/ HTML

<html> 
<head> 
    <title>Bash as CGI</title> 
</head> 
<body> 
<h3>General system information for host localhost</h3> 
<h4>Memory Info</h4> 
<pre>    total  used  free  shared 
buff/cache available 
Mem:   1775   994   137   20   643   
540 
Swap:   2047   0  2047 </pre> 
<h4>Disk Info:</h4> 
<pre> Filesystem    Size Used Avail Use% Mounted on 
/dev/mapper/centos-root 47G 9.7G 38G 21%/
devtmpfs     873M  0 873M 0% /dev 
tmpfs     888M 4.2M 884M 1% /dev/shm 
tmpfs     888M 9.1M 879M 2% /run 
tmpfs     888M  0 888M 0% /sys/fs/cgroup 
/dev/sda1    1014M 235M 780M 24% /boot 
tmpfs     178M 4.0K 178M 1% /run/user/42 
tmpfs     178M 44K 178M 1% /run/user/0 </pre> 
<h4>Logged in user</h4> 
<pre> 21:33:21 up 2:01, 3 users, load average: 0.06, 0.04, 0.05 
USER  TTY  FROM    [email protected] IDLE JCPU PCPU WHAT 
root  pts/0 :0    20:45 1.00s 0.14s 0.00s w 
root  :0  :0    20:45 ?xdm? 1:11 0.11s 
/usr/libexec/gnome-session-binary --session gnome-classic </pre> 
<hr> 
Information generated on Sat Nov 18 21:33:21 EST 2017 
</body> 
</html> 
+0

什麼是您的網絡服務?你如何配置它執行'.sh'腳本? – janos

+0

請問您的文件包含右雙引用(你粘貼的東西沒有) –

+0

「不能執行」對於你的問題並不是一個非常有用的描述你究竟看到了什麼意外的行爲?寫到Web服務器錯誤日誌中的內容 –

沙发
0
2

echo的命令,打印內容中缺少張貼代碼閉合"。 無論如何, 雙引號字符在HTML內容中非常常見,這種打印方式可能會在以後引起頭痛。 它會更容易使用此文檔:

#!/bin/bash 

cat <<EOF 
Content-type: text/html 

... (HTML content here) 

EOF 

還要注意的是要能夠運行這個, 文件必須是可執行文件(chmod +x script.sh), 和Web服務器必須配置爲執行腳本, 而不是打印其內容,這是一種常見的默認設置。

板凳
0
0

爲什麼迴應???!

print「Content-type:text/html n n」;

打印「等等等等」,並記住的第二個「你沒有它。

0
votes
answers
78 views
+10

PHP提取從Openload.co直接視頻路徑嵌入式URL

0

我正在尋找解決這個問題的很長一段時間。大約3個星期,我沒有得到任何解決方案。PHP提取從Openload.co直接視頻路徑嵌入式URL

這是要提取

https://openload.co/embed/nLFGFH8VuZs/

的openload嵌入的URL直接鏈接: https://1fiafzt.oloadcdn.net/dl/l/5qcL-TC0FIr7GgUX/nLFGFH8VuZs/VELMA2017RIPN15.mkv.mp4

可有人可以建議的解決方案將其解壓。我使用google chrome Inspect元素獲得了直接網址。 我可以看到一旦我點擊播放。如何我可以使用PHP或任何其他

感謝

+0

嘗試phantomjs或YouTube-DL –

沙发
0
0

嘗試 openload API(鏈接 - https://openload.co/api

首先,您需要使用此URL

https://api.openload.co/1/file/dlticket?file= {文件生成的驗證票} & login = {login} & key = {key}

where,file = nLFGFH8VuZs(in you R情形)

您將在JSON格式得到票

其次,使用下面的URL生成下載鏈接 -

https://api.openload.co/1/file/dl?file= {文件} &票= {票}

您將得到下載鏈接在JSON文件

(EG)網址: 「https://1fiafzt.oloadcdn.net/dl/l/5qcL-TC0FIr7GgUX/nLFGFH8VuZs/VELMA2017RIPN15.mkv.mp4

0
votes
answers
65 views
+10

僅在測試中報告失敗測試::更多

1

我對隨機生成的數據進行了大量檢查。我怎樣才能得到報告消息只爲失敗的測試,如果檢查是好的,什麼也不顯示?僅在測試中報告失敗測試::更多

沙发
0
3

您可以使用fail例程。在任何Test :: More代碼之外進行檢查,並使用該結果來決定是否輸出測試消息。

foreach my $element (@randomly_generated_data) { 
    my $result = ...; # your checks here 
    next if $result; 
    fail('Some message'); 
    } 
0
votes
answers
63 views
+10

限制在Perl腳本中執行的程序的同時實例數(大於1)

3

我在Perl腳本中使用資源密集型程序[特別是將文件傳輸到Google Drive的rclone]。限制在Perl腳本中執行的程序的同時實例數(大於1)

我還沒有搞清楚如何我想打電話給rclone,因爲我需要限制的rclone實例基於一些條件(什麼有關預防服務器超載,死機,崩潰等)的數量。我希望腳本在執行rclone之前等待apt系統的「條件」(這可能需要很長或無限的時間)。

一些細節:

  • 腳本本身基本上是通過包含由另一個程序(可能很多)的文件的文件或目錄的路徑(這個程序用Python寫的 - 這個程序叫做<A>供參考)。
  • <A>僅向腳本返回一個值,因此對腳本或rclone一無所知,除了它接受輸入。
  • <A>不能被改變(即改變<A>我是無法理解)
  • <A>火災在不同的時間間隔[即有時它會連續快速多次執行腳本(創建多個實例),其他時候,它可能只觸發一次,每隔幾個小時,分鐘等]
  • 假設rclone不能直接(即再次要麼改變,超出我的肯定)。
  • 如果絕對必要,可以限制腳本實例的數量,而不是rclone(儘管我更喜歡它只是rclone,因爲腳本所做的處理比較輕而且不需要限制)。
  • 模塊很好用。
  • 我想避免使用類Unix操作系統命令等pgrepps(除非絕對必要)。

目前,我正在使用寫得比較差的bash腳本來代替Perl腳本。在bash腳本實現了一個基本的(設計不佳)「檢查/睡眠循環」使用pgrep -wcsleepwhile循環和if語句。 (說實話,我甚至不認爲bash腳本真的有效/有助於atm。)

+0

您可以將** GNU並行**作爲'sem -j N'調用,它只允許'N'個並行運行https://stackoverflow.com/a/46206137/2836621和https:// www.gnu.org/software/parallel/sem.html –

+0

@Mark啊,是的,完全忘了那個有用的程序,它也是用Perl編寫的。如果命令被多次調用,並且每次都在_different_腳本中,您是否知道信號量功能是否有效?那就是---使用廁所比喻----每個腳本實例是否都有自己的「廁所空間」,其他腳本實例無法訪問,或者所有腳本實例都使用同一個「房間」? – YenForYang

+1

是的,只要不同的程序都給出了與我鏈接的答案相同的'--id'。 –

沙发
0
4

我會假設你的腳本是唯一運行rclone。如果您只需要運行1個副本,you would just use a lockfile

對於N實例(小N),我只想有N個的lockfiles - 有計劃依次嘗試每把鎖,在一個循環;如果所有的鎖已經被保持並且稍後重試1秒,則在一個循環中暫停。一旦鎖定,運行rclone,然後在完成時釋放鎖定。


一個較好的方法是使用SysV的信號量,但是,除非你想有一個大的N,真正關心的響應時間或擔心的調用者之間的公平性,這是不太可能是值得花時間學習他們。


如果你的腳本是不是要求rclone唯一的程序,然後將需要攔截所有的來電 - 而不是把這個代碼在你的程序,可以通過它實現了並行約束如上然後調用包裝更換rclone真正的節目。

板凳
0
2

GNU並行可以在作業隊列工作https://www.gnu.org/software/parallel/man.html#EXAMPLE:-GNU-Parallel-as-queue-system-batch-manager

true >jobqueue; tail -n+0 -f jobqueue | parallel -j10 --timeout 1h rclone 

然後運行<A>就象這樣:

<A> >> jobqueue 

現在,然後將不得不清理jobqueue。但是,除非<A>產生瘋狂的數據量,否則在每次重新引導時將其清零(true >jobqueue)通常就足夠了。

0
votes
answers
57 views
+10

Perl如何從另一個包中導入我的包?

0

這是我的文件夾結構:Perl如何從另一個包中導入我的包?

XFolder/ 
XFolder/YFolder/ 
XFolder/YFolder/package1.pl 
XFolder/package2.pl 

package2.pl,我有:

package X::Pa2 

package1.p1,我有:

package X::Y::Pa1 

package1.pl,當我這樣做:

use X::Pa2; 

我得到

Can't locate X/PA2.pm in @INC (you may need to install the X::Pa2 module) 

如何解決它嗎?

我知道問題出在哪裏,我嘗試使用谷歌幫助,但我不能加我X::Pa2@INC,我不知道是否有Perl的專家

+1

你的包需要一個'.P M'延伸和通常遵循的目錄路徑爲他們的名字'X/Pa2.pm'和'X/Y/Pa1.pm' – KeepCalmAndCarryOn

+0

@KeepCalmAndCarryOn我改變了他們的.pm,但仍是同樣的錯誤:( –

沙发
0
3

模塊更標準的解決方案應該有.pm擴展名,並且文件的名稱應該與包的名稱相匹配。

要解決:

mkdir -p X 
mv XFolder/package2.pl X/Pa2.pm 

mkdir -p X/Y 
mv XFolder/YFolder/package1.pl X/Y/Pa1.pm 

這些路徑需要是相對於在@INC發現了一些路徑。

如果這些模塊使用我的多個腳本,以下內容添加到您的登錄腳本:

export PERL5LIB=/path/to/lib 

如果這些模塊只使用一個腳本,基本目錄是在該腳本所在的目錄,下面添加到您的腳本:

use FindBin 1.51 qw($RealBin); 
use lib $RealBin;     # Or maybe: use lib "$RealBin/lib"; 

use Cwd qw(abs_path); 
use File::Basename qw(dirname); 
use lib dirname(abs_path($0));  # Or maybe: use lib dirname(abs_path($0))."/lib"; 
+0

未改變什麼:(我改變了擴展名.pm和包已經作爲文件名,但史迪威同樣的錯誤 –

+0

請提供返回的實際錯誤消息,並且您試圖加載文件的完整路徑。 – ikegami

+0

ikegmai:文件是這樣的:'X(文件夾) - > Y.pm','X(文件夾) - > Y(文件夾) - > Z.pm'和內部Z.pm我使用X ::ÿ並且所述消息是X/Y.pm不在@INC,INC doen't包含基礎文件夾(其爲X),但我使用'使用LIB( ' ');'。''' –

0
votes
answers
64 views
+10

我不明白「push」返回的值

0
use strict; 
use warnings; 

sub maximum_value { 

    my @array = @_; 
    my @array1 = shift(@_); 
    my @array2 = push(@_, 0); 

    print "@array
"; 
    print "@array1
"; 
    print "@array2
"; 

    my $i = 0; 

    foreach (@array) { 

     if ($i < $_) { 
      $i = $_; 
     } 
    } 

    print "
Max Value is $i"; 
} 

maximum_value(10, 15, 11, 13); 

這是一個Perl腳本。我將這些值傳遞給子程序並將它們存儲在@_中。爲什麼@array2評估爲4?我不明白「push」返回的值

+2

你已經有了一個很好的答案,但是我可能會問你期望在@ @ array2中? – PerlDuck

沙发
0
8
perldoc -f push

狀態:

返回下列完成的推數組中元素的數目。

  1. @_開始有四個要素,因爲你有4個參數調用你的子。
  2. shift@_數組中的第一個元素。 shift返回已移除的元素。 @_數組現在包含3個元素。
  3. push零到末尾的@_數組,其中又包含4個元素。 push返回元素的數量,並將其分配給@array2