- 締切済み
perlのバージョンによる動作の違い
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- blackdragon
- ベストアンサー率35% (428/1222)
正規表現の/s修飾子を除くと5.6.1でも abc|de|fgh と出力しますね。 プログラミングPerl第3版によると、/sスイッチは、単一の行が入っている という仮定で、改行文字にもマッチし、$*変数を無視するとのことですね。 $*変数が何者かを知りませんが、このあたりが怪しいところでしょうか?
関連するQ&A
- join と split で文字列を操作する場合
にんにちは、 うまく解決する方法を思いつかないので、質問させてください。 以下のスクリプトを実行すると、a から z を * で join して、 その後、* で split するかなと思ったら、split は正規表現として とらえるためでしょうか、エラーになります。 #! /usr/bin/perl -w use strict; my $a = '*'; my $b = join $a , ('a'..'z'); print "$b\n"; my @result = split /$a/,$b; print "$_\n" foreach @result; exit(); $a = '\*'; にすると、split したときに、 余計な \ が残ってしまいます。 任意の(書く時点では分からない)いろんな文字列で 連結したり分割したりする場合のスマートな方法が ありましたら、教えていただけませんか? Perl 5.8 です。お願いします。
- ベストアンサー
- Perl
- Linux上でtcpdumpの出力をperlで処理したいと考えています
Linux上でtcpdumpの出力をperlで処理したいと考えています。 下記のようにtcpdumpの標準出力をperlの標準入力で受け取ろうとしても tcpdumpの処理が終わらないためパイプ(|)経由でperlにデータが渡ってきません。 [test.pl] $|=1; foreach(<>){ print "--- $_"; } exit; Linux上のコマンド tcpdump -l | ./test.pl これをteeに置き換えるとtcpdumpの出力はリアルタイムに表示されます。 tcpdump -l | tee a.log 質問:perlでteeを作ることはできますか?
- ベストアンサー
- Perl
- PerlでCGIを書いておりますが、特定のURL(ディレクトリ)の位置データを取得するには?
PerlでCGIを書いております。 http://test.com/a/test/index.cgiにアクセスしているときに、perlがaを取得して、http://test.com/b/test/index.cgiにアクセスしているときbを取得する良い方法は有るのでしょうか?WindowsとLinuxの両方で動作できれるものがあれば宜しくお願いします。 WindowsとLinuxではディレクトリの感じが違うようなので1個の方法で実現できれば助かります。
- 締切済み
- CGI
- Perlで複数の値を返す良い方法はありますか?
以下のように多重代入できるかと思って確かめましたが、 結果は以下の通りでした。 $a=[] $b=[20] 方法はいろいろとありそうですが、Perl苦手でわかりません。 sub test{ local $cc = ''; local $s = ''; $cc = 'AAAAA'; $s = 20; # return $cc, $s; } $a, $b = &test; print "\$a=[$a]\n"; print "\$b=[$b]\n"; exit; __END__
- ベストアンサー
- Perl
- 行頭と行末に文字追加
文字変換がうまくいきません。 sedとawkもしくはperlを使ってなんとかならないでしょうか? 行の行頭と行末を " で囲みたいのですが。 ------test.txt----- abc cde fgh hijk lm nopq rstu vwx y z ------test.txt---- 以下のように。 "abc cde fgh" "hijk lm" "nopq rstu vwx y z" よろしくお願いします。
- ベストアンサー
- Perl
- PerlからPythonについて
以下のPerlをPythonで書くとどうなるのでしょうか? pythonのヒアドキュメントと<DATA>, chompの動作の置き換えが知りたいです。 ヒアドキュメントは"""や'''で可能?と思いますが、ヒアドキュメントを1行づつ取り出す方法がわかりません。 use strict; # <-- Pythonの厳格化?の警告方法も知りたいです。 while(<DATA>){ chomp; print "$_\n"; } exit; __DATA__ abc de f ghi 参考になるサイトや本をご存じの方教えてください。
- ベストアンサー
- Perl
- 皆さんは、LinuxでPerlのバージョンアップはどのようにしていますか?
VineLinux 2.6?で Perl5.6.1を使っております。 最初 VineLinux2.5でしたがアップデートして2.6?になっております。 最近、Perl5.8系を使う必要がでてきた為、Perl5.6から Perl5.8に アップグレードしたいのですが、 運用に支障きたさず、スマートにアップグレードできる方法はあるのでしょうか? VineLinux3の場合は Perl5.8?が入っている?ので 新規OSインストールすれば、素直ですが 設定に時間がかかるので、 サーバー環境はそのままで、Perl5.8だけアップフレードしたいです。 rpm -qa | grep perlの結果 postgresql-perl-7.2.3-0vl3 groff-perl-1.17.2-0vl4 openssl-perl-0.9.6m-0vl0.26 perl-GD-1.38-1 perl-File-MMagic-1.12-0vl3 perl-Net_SSLeay-1.13-0vl1 perl-SGMLSpm-1.03ii-4vl1 perl-DBI-1.21-0vl1 perl-5.6.1-0vl13 何やらいっぱい出てきて、このあたりの依存関係も注意?かなと ビクビクしております。 あと、5.6系で、使っていたPerlモジュールも5.8ではもう一度インストールする必要が 出てくると思いますが、5.6系のモジュールを全て表示させるツールはあるのでしょうか? uname -a Linux ホスト名 2.4.19-0vl26 #2 2003年 1月 22日 水曜日 03:10:41 JST i686 unknown Vine Linux 2.6r4 (La Fleur de Bouard) Kernel 2.4.19-0vl26 on an i686
- ベストアンサー
- Perl
- ファイルから一行ずつ読み込むとき、@F[0] と $_ は違う?
データファイルを一行ずつ読み込んで、文字列を一文字ずつコンマ区切りにしたいと思っています。たとえば、 xyz → x,y,z としたいと思っています。 今、data.txt に abc defgh という2行が書いてあります。 perl -nla -e '@chars= split(//,@F[1]); print join(",",@chars);' data.txt とすると a,b,c d,e,f,g,h という出力が無事に得られました。 どうせ、data.txt は一列しか使っていないので、 @F[0] の代りに $_ を使ってみました。 perl -nle '@chars= split(//, $_); print join(",",@chars);' data.txt しかし、結果は a,b,c, d,e,f,g,h, のように、各行の最後に余計なコンマが付いてしまいます。 なぜでしょうか? 一列しかデータがないので、@F[0] と $_ は同じだと思っていたのですが、なにか違うのでしょうか?
- ベストアンサー
- Perl
- Perlのキャプチャ
プログラム #!/usr/bin/perl my $str = "abc,def,ghi"; ($a,$b,$c) = $str =~ /(.*),(.*),(.*)/; print $a,"\n"; print $b,"\n"; print $c,"\n"; 実行結果 abc def ghi このようなプログラムで ($a,$b,$c) = $str =~ /(.*),(.*),(.*)/;は それぞれ$a,$b,$cにabc,def,ghiが入ります. キャプチャしたすべてを変数に入れるならこの方法ですが, defだけが欲しいのに変数を3つ用意する必要がないと思います. 間違った表記ですが, ($b) = $str =~ /(.*),(.*),(.*)/$2/; 2つ目にキャプチャした$2が変数$bに入るような表記は出来ないのでしょうか?
- 締切済み
- Perl
- Perlで文字列から指定箇所を抽出したい
Perlで質問です。 「<div class="testclass"> <a href="test.php?filename=1600176008&s2=1307521989&s3=&p=1"><img src="test.jpg"></a>」 上記のデータのリンクのURL「test.php?~~」の部分を抽出したいです。 split("href=\"",$data); みたいな感じで前と後ろをsplit関数で消せば取り出せると思ったのですが、他に良い方法はありますか?
- ベストアンサー
- Perl