773 :
Perl中級者になりたい :
2008/07/23(水) 15:49:05
ロゴがかっこいいとおもいます(汁
x print "Content-type: text/html\n"; o print $cgi->header();
x my %http_code = ...;
o use
HTTP::Status qw/status_message/;
x 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
o 'LinkHACKS (+
http://w7.oroti.com/~webhacks/ )'
x $browser->get(...);
o $browser->head(...);
>>778 $resp->status_lineで取れるから
>my %http_code = ...;
これはいらないな
780 :
Perl中級者になりたい :2008/07/23(水) 18:22:40
>>775 ahoの嵐・・・orz
受け取ったデータのチェックが必要ですね。。頑張って修正します。
>>776 webprog板逝ってきます。
>>777-779 / \
/ ─ ─\
/ (●) (●) \
| (__人__) | )) なるほど
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ “ /__| |
|\ /___ /|
| ノ
ヽ y /
\ / /
/ /
(___)_)
オトナの事情
>>781 現行だと$coderef->() だろ?
. の方がバイト数がかせげる & '->' と言う定義をせずに済む。
何しろ > は => だの <=> だの他にも大活躍だから、、、
>>781 名前空間とパーザの都合。……Rubyの場合は。
Perlは何故なんだろうねぇ。変数を示すプリフィクスが付いてるんだから問題なさそうな気がするんだが。括弧省略との相性が悪いのかな?
$foo.()と$foo()は同じ意味のはず。 例えば、&はP5と違って関数をオブジェクト化したものを返すけど、 これを呼ぶときも、&bar.()と&bar()の両方で書ける。
787 :
781 :2008/08/12(火) 09:24:25
>>787 他にも++なんかの接尾演算子でも、$foo.++; と $foo++; の両方で書ける。
これは演算子がオブジェクトのメンバだっていうイメージなんだろうね。
789 :
デフォルトの名無しさん :2008/08/12(火) 20:44:56
Perl勉強中で 変数Aにオブジェクトが入ってて オブジェクトに$Cの値を入れようとしてるんですが 下記の1,2の違いについて調べても分からなくて 教えてくださるかたいませんか?_?ヒントだけでもいいので;w; 1: $A->B($C); 2: $A->{B} = $C;
>>789 「オブジェクトに$Cの値を入れ」るが意味不明。
もう少しちゃんとした言葉を使って説明してくれ。
1は PackageOfA::B($A, $C) とおなじ、
2は ${$A}{"B"} = $C とおなじ。
1のBはメソッドでCは引数 2のBはハッシュのキーでCは値
792 :
デフォルトの名無しさん :2008/08/30(土) 01:16:38
あいかわらず、日本語マッチングは面倒ですか? Emeditorの正規表現の方がよくね?
日本語マッチングって何?
794 :
デフォルトの名無しさん :2008/08/30(土) 01:30:05
まだつかえないんだ・・・
だから日本語マッチングって何だよ。
796 :
デフォルトの名無しさん :2008/08/30(土) 01:39:45
まだつかえないんだ・・・
^^;;;;;;
まぁどの言語でもそうだが、バカには使えないわな。
20世紀からタイムスリップしてきたひとか
800 :
デフォルトの名無しさん :2008/08/30(土) 08:28:11
>>799 もしかして、20世紀から生きてる人ですか?
この板も、とうとう小学生が跋扈するようになったか。
最初のプログラミング言語がPerlって、 スパゲッティー作りになることを義務づけられるぞ。
最近の小学生は制御構造なんて使いこなせないから
CASE文満載でなければおk
最初に入った言語がCOBOLだった俺からいわせれば、perlなんて可愛いもの。
>800 は8歳だったのか。 算数の勉強頑張れよ。
>>1 の日付見て吹いた
2008/08/13の勢いは異常だな
808 :
デフォルトの名無しさん :2008/10/26(日) 12:34:29
あげ
809 :
デフォルトの名無しさん :2008/11/11(火) 02:41:57
810 :
デフォルトの名無しさん :2008/11/12(水) 02:48:46
>809 sjisがベタで使われてるとか、htmlのタグの記述に統一性が無いとかで 極力係わり合いになりたくないコードだなぁ タイトル増やすのも面倒だ こいつを書き直せって課題なら、嬉々としてやるところだw
webprog池よ
>>809 ガッコの課題で、そんな例題を出すのかぁ・・・・
そりゃ問題だ!
perlでメールの添付ファイルの処理をしようとして、
ttp://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm を参考にプログラムを書こうと思っているのですが、
上記ページのWordDecoderを使ったサンプルプログラムを実行すると、
保存されたファイル名がURLエンコードされている状態になってしまいその原因が分かりません。
実はURLエンコードされている方が扱いやすくてうれしいのですが、
原因が分からないのが気持ち悪くて…。
どなたか教えていただけないでしょうか。
動作環境はFreeBSD6.0で、Jcode, MIME-Toolsはportsでインストールしました。
よろしくお願いいたします。
815 :
814 :2008/12/19(金) 05:30:45
すみません、別のスレ(Perlについての質問箱)で聞いてこようと思います。 失礼しました。
perlで書かれたプログラムをダウンロードしたのですが、 使い方として、 ・本体(exxeed.pl)は編集の必要がありません。 ・cpiファイルにスクリプトを追記して、動作を指定します。 ・起動方法 コンソールから > perl exxeed.pl hogehoge.cpi とだけ書かれているのですが、これって、 サーバー内のCronなどからコマンドで実行するって事ですか?
シェルから実行すればいいだけだろ
>コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから
コンソールから シェルから この意味がぐぐってもイマイチ理解できてないです。 要するに、サーバーにアップして使用するのではなく、 コマンドプロンプトとかから実行するものなのですか?
>>819 そのperlスクリプトが提供する機能がわからんのに答えられるわけがなかろう。
定期的に動かすものならcronに登録するし、
CGIならWebサーバのCGIディレクトリに設置するし、
コマンドラインで実行することになってるプログラムならコマンドプロンプトやターミナルエミュレータから実行するし、
GUIアプリならエクスプローラやファイラーからダブルクリックする。
>>819 サーバで動かしたいなら、サーバにアップロードしてから
リモートシェルの類で実行すればいい。
なんにしてもperlの使い方の質問じゃないから、
適当なスレを探してくれ。
・起動方法 コンソールから > perl exxeed.pl hogehoge.cpi これ読んでわからんのなら、パソコンの使い方を勉強しろ。 そうとしか言いようが無い。 駅前のアビバに通った方がいいぞ。
823 :
816 :2009/01/13(火) 04:20:00
皆さん有難うございました。 まだよくわからないので、他スレで聞いて見ます。
824 :
A :2009/01/13(火) 16:19:41
それは、コマンドプロンプトから起動(実行)するもの。
UNIX/Linuxの場合、シェルから起動(実行)する、とも言う。
>>816 何がしたいのか書いてない。
<form method="POST" action="exxeed.pl"> ただこれは無理だと思う。
コンソールっつーとサーバセンターまで行ってキーボードぶっ挿して、ってイメージ
↑ Windows しか触ったこと無いひと。
828 :
デフォルトの名無しさん :2009/01/16(金) 23:18:15
ウェブプログラミングで引っかかってる問題だが、本質はEncode.pmなんで、こっちで聞こうと思いまつ。 utf-8の"~"を Encode::from_to で EUC-JPに変換すると、?に文字化けするようです。 -------------------------------------サンプル #!/usr/bin/perl -w use strict; use Encode; my $str ="~"; Encode::from_to($str, "utf-8", "euc-jp"); print "Content-type: text/html\n\n<html><head><meta http-equiv='Content-Type' content='text/html; charset=EUC-JP'></head><body>$str</body></html>"; -------------------------------------サンプル これってEncode.pmのバグですか?対応方法は何かありますか?
>>828 関係無いけどウェブプログラミングなら
>#!/usr/bin/perl -w
>use strict;
>use Encode;
ここは
#!/usr/bin/perl -T
use strict;
use warnings;
use Encode;
のほうが良い。
832 :
デフォルトの名無しさん :2009/01/28(水) 12:51:50
829さんのスレッドが落ちていたのでこちらで質問失礼します。 Perlで、ハッシュデータにKEYとKEYに対応した値が多数格納されているとします。 そのKEYに対応した値から、KEY自体を取り出したいのですがそれは可能でしょうか。 可能でしたら簡単なプログラム例を教えて頂けると大変助かります。
while ( ($key, $value) = each(%hash) ) { if ($value eq "うんこ") { print $key; } }
>>832 reverse使えばできる。
my %new_hash = reverse %old_hash;
これで、元のハッシュの値をキーとして、
元のハッシュのキーを値とするハッシュができる。
ただし、元のハッシュで値が同じものが2つ以上あるときには、
うまくいかないです。
835 :
デフォルトの名無しさん :2009/01/28(水) 13:27:30
836 :
デフォルトの名無しさん :2009/01/31(土) 09:16:57
正規表現なのですが <h2 class="title">を正規表現で表すと、(英数字の[0-9|a-zA-Z]は省略) <h2.\s.class=\"title\">でよいのでしょうか
聞く前に自分で試した方がなんぼか速いんでないかい
>>837 試したのですが、出来なかったので間違っていると思うのですが
どこが間違っているのかわかりません
>>838 htmlのタグで一番簡単なマッチはこの2通り
/<.*>/
/<[^>]*>/
てか正規表現のスレで聞けばはやいのでは?
>>836 "."は文字一つ食べてごちそうさま。
"\s"はスペース一つ食べてごちそうさま。
もうひとつ"."も文字一つ食べてごちそうさま。
何文字用意してあげれば、おなかいっぱいになるの?
うん、三文字。
スペース一文字じゃ、おなかいっぱいにならないね。
食べるの控えたら、だいじょうぶ?
食べるの控えたら、だいじょうぶ?
842 :
デフォルトの名無しさん :2009/02/01(日) 02:47:31
Perlのコードのことで判らないことがあるため質問させていただきます。 現在読んでいるコードに、 return 0 if ($hoge < 1); のような行があるのですが、これはどのような処理になるのでしょうか? 関数の途中にあり以下にも処理の記述があるため、私の想像では return 0 の後ろに続く、ifが真のときにreturnが実行されるかと思うのですが、 なぜこのような書き方をするのでしょうか? 私が考えるのでは、 if ( $hoge < 1) {return 0;} とすればいいかと思うのですが、何か理由があるのでしょうか? 質問をいくつもすみませんが、教えていただけるとありがたいです。
>>842 英語の表現で、
hogehoge if fugafuga
ってのがあるだろ? それをプログラミング言語の文法に組み込んだのが前者。
意味は後者と同じ。
>>843 ありがとうございます。
やはり、ただの書き方の違いだけでしたか。
>>844 >return 0 if ($hoge < 1);
>if ( $hoge < 1) {return 0;}
書き方の違いもあるけど直感でわかるかどうかも重要だから
そういう箇所は書き直していったら後から読む人は助かる箇所も出てくると思う。
それで動作しなくなったら問題なので十分に注意、検証は必要だけどね。
「orが嫌い」と言う理由で「||」に全置換かましたバカを思い出した。
処理が単文なのにいちいちブロック書くのが面倒というのもある。 さらに return 0 if $hoge < 1; とも書ける。前に書く場合は括弧が必須。 文修飾子(statement modifiers)(後ろに付ける if, unless, while, until, foreach)を使うなら 括弧を書かない場合が多いんじゃないかな。
>848 単語一致以前に or と || では優先順位が異なる。
>>850 ああ、そういう意味ですか。
operatorの「or」も置換して、operat||にしてしまうのかと思った。
普通に考えて優先順位の話ってわかるじゃん(´・ω・`)
質問なんですけど、@INCに入るパスって環境変数のPERL5LIB以外にどこからとってきてますか? zshrcには書いてあるパスの集合がAだとすると、 local/lib/perl5/5.8.8 local/lib/perl5/i386-freebsd-64int A local/lib/perl5/5.8.8/BSDPA local/lib/perl5/site_perl/5.8.8/mach ... というような並びで並んでます。 Aの前と後にどこからパスを持ってきているのかわからず。perlのコンパイルの時にそんな指定するんでしたっけ? PERLLIBも指定してなし、よくわからない
>>851 そんなこと言い出したら "or" が部分文字列として含まれる単語なんて
いくらでもあるじゃないか
このスレ見える範囲で検索しただけでも word, form, ports, livedoor とか出てきた
>>854 なるほど。ありがとうございます。
コンパイルした後に変えることは無理?
5.8.8をもう一回コンパイルし直すならいっそのこと5.10をコンパイルしようかなと思うのですけど。
use libできんのか?
>>857 use libとか@INCに入れれば解決なのだけど、
そもそもそのリストをどこからどういう順番で取ってきているかを知りたかったのです。
おれの@INC、パスがダブっちゃったりしてるから。
>>858 ソースのperl.cを参照。
ソースをそのままコンパイルして使うならまあいいんだけど、
一部のLinuxディストリによっては、これにpatchが当たってて、
読み込むパスや順番が異なってる。
>>856 > コンパイルした後に変えることは無理?
スクリプト単位なら use lib や BEGIN { @INC = ... } 。
ユーザ単位なら環境変数 PERL5LIB / PERLLIB。
システムワイドに設定したければ、sitecustomize.pl が
利用可能ならその中で好きに編集すればいい。
プログラム読んでてよくわからん構文出てきたから 最小のコードにしてみたらこうなった sub a{return [(1)x5];} @b = @{a()}; for(@b){print;print " ";}print "\n"; 2行目の@{ }で囲っているところは何をやっているのか 誰か教えて
デリファレンス
把握した
@{[ $ref ]} kore nani?
dereference
>>864 リファレンス作ってデリファレンスしてる。
無名配列を作りたい時に便利。
例えば文字 "," のカウントをしたい場合。
====
my $str = q{a,c,b,d,e} ;
#my $cnt = $str =~ /,/g ; #<= ダメ
#my $cnt = my @tmp = $str =~ /,/g ; #<= tmp 作るの?
my $cnt = @{[ $str =~ /,/g ]} ;
print $cnt . qq{\n} ;
====
最もこのケースだったら以下の方法のが遥にスマート
my $cnt = () = $str =~ /,/g ;
my $cnt = $str =~ tr/,// ;
ちなみに↓コレだと @{[]} する意味があんまり…
@{[ $ref ]} ;
これはいいもん読めた
ここまだ残ってるんだな・・・ (糞レスすまん
870 :
デフォルトの名無しさん :2009/03/25(水) 23:33:08
○○.cgiのプログラムで、 「exec △△.pl $param1」とexecを使用して呼び出しても、 呼び出し先の△△.plが実行されないです。 環境が原因と思うのですが、 初心者で何が原因かわからないです。
webprogいけ
初心者がCGIとかヤメレ
マルチ氏ね
874 :
デフォルトの名無しさん :2009/03/26(木) 06:22:15
【Yahoo!番付で亀井をMVPにしようぜwwwww】
ttp://takeshima.2ch.net/test/read.cgi/news4vip/1237983005/50 ベンチの支えあっての原JAPAN 亀井こそが真のMVP
↓
イチロー福留青木稲葉がいる外野においては常にベンチが決まっているような状態で、
でももう一人予備の外野を選ばなくてはいけなくなった。
そのような役は自軍から出さねばならないと考えた原監督は亀井に白羽の矢を立てた。
誰もが落選すると思われていた亀井だったが、最終メンバーに選ばれた。
亀井も一度は監督に辞退を伝えたが、原監督は亀井に説得を行う。
亀井は尊敬する監督にそこまで言われたら、ということで辞退を撤回。
叩かれる事が分かっていながらもベンチから声援を送り続ける。
そんな亀井はMVPに相応しい
マルチ氏ね
おまいらお願いです。 フルパス文字列から親ディレクトリ名を取り出す方法を検討中なのですが、 例) /hoge/fuga/var/foo を入れると /hoge/fuga/var が出てくる $PATH = '/hoge/fuga/var/foo'; $PATH =~ m|.*/|; $PATH = $&; $PATH =~ m|\/$|; $PATH = $`; こんな風にして一応動いたんですが、カコワルくて人に見せれないコードです。 もっとすっきりキレイに仕上げる方法がある気がしてなりません。 もっとキレイな方法を教えてもらえませんか?
my $target = '/var/www/html/index.html'; my($per_dir) = $target =~ m|(.+)/[^/]+/?|; print $per_dir,"\n"; ”親directory”とゆうことなので。 それじゃイヤンってんなら、ググるなりして調べてくれ。
>876 File::Basename の dirname 使えば?
$path =~ s/[^\/]*$//;
>>879 >>880 ㌧。やりたかった事は、レン鯖のDOCUMENT_ROOTの1個上にDBやらパスワードの設定ファイル(xml)を置いて、それを読み込んで処理する作業だったのです。
use XML::Simple;
- 略 -
my $DOCUMENT_ROOT = $ENV{'DOCUMENT_ROOT'}; # httpサーバが表示する / ディレクトリ
my ($SETTING_PATH) = $DOCUMENT_ROOT =~ m|(.+)/[^/]+/?|; # 親ディレクトリ
my $DB_Info_XML = XMLin($SETTING_PATH. '/dbpassword.xml');
my $DB_NAME = $DB_Info_XML->{dbinfo}->{dbname};
- 略 -
という感じで実装しました。あとで
>>880 のやり方に書き換えます。^^
882 :
デフォルトの名無しさん :2009/04/01(水) 20:54:35
教えてください。 CatalystでDBIx::Class使って pagerやろうとしたのです my $rs = $c->model(..)->search({}, {page =>1, rows=>10}); $c->stash->{data} = $rs; .tt にて [% SET pager = data.pager %] [% INCLUDE pager.tt %] で、data.pagerを参照するところで Can't create pager for non-paged と言われて困ってます。 どなたか助けて頂けませんか?
883 :
882 :2009/04/01(水) 21:36:58
申し訳ありません。自己解決しました。 pageに渡している値が空のケースがあるとあのエラーがでるようです。 失礼しました。
そうねぇ、、、perl って小回り効くから確かに便利だけど、 sed+awkとして使うまでに留めておくべきだな。 技術者の力量に依るような自由な言語は、プロジェクトとしてはなるべく使いたくない。
いまどき CGI は無いだろ
>884 PerlはLL界のCOBOLになったな。
>>884 こういうの見ると「終わった感」が増して逆効果だと思うんだが・・
団結して良さを説明ようとか、方法論からして前世紀かよって思う。
「モダンPerl入門」って糞?
WEBアプリ以外はソフトウエアに非ず そんな風潮。 perl はWEBアプリ専用言語じゃないのに PHPやらASPやらJSPやら出てきたら perl はお払い箱?・・・それじゃ、かわいそうだよ。
誰か助けて下しア 環境がPERL5.8.* Jcode 2.6.5 PERL5.6.1 Jcode2.0から移したら 今までCGIで文字化けしなかったものが化けました。 $str = '㈱ホゲマン; $hoge = Jcode->new($str, euc)->h2z->euc; print "$hoge"; 今までは ㈱ホゲマン と表示されていたのに、 ?ホゲマン となります。 原因を調べていたら、5.8移行は機種依存文字は無視しないで?に変換してしまうとのことで。。。 これを ㈱ホゲマン となるように 解決したいのですが、どなたかご教授ください。
すません、ちなみに~入れろ、とかは出来ない状況です。 UTF8でやれとかも無理な状態です
すません 他で聴くためこちらの回答は不要です 失礼しました
お前誰だよ
>>884-888 蛇足情報として書いておくと、米国は perl / python 使いが多い。
>>890 PerlはCみたいに残るでしょ・・・
awkは使ったこと無いw
Windows の時代になっても バッチファイルは残った。 だから Unix が GUI になっても Perl は残る。
その文脈だと、残るのは sh であって perl ではないような、、、 まあ、perl がなくなるようなことはないだろうけど。
ちょw
cshみたくpshとか出来るんじゃね?
901 :
デフォルトの名無しさん :2009/04/17(金) 00:26:46
pyshonでいいよ。
903 :
デフォルトの名無しさん :2009/04/18(土) 15:51:41
これからはパールの時代がくるのかもな
ルビーです
ルアだろ、常考
>>898 最近はMakefileでもPerlがインストールされているのを前提に
Perlスクリプトが走ったりするのがある。既にshの代替として
機能している部分があるのでなくなりはしないと思う。
逆にpythonやrubyでそんんあのみたことない。
>>885 安い人間しか雇わないなら学習コストを考えるとPerlはないな。そういう人はPHPでも使えばいい。
>>889 MooseとかモダンCatalystとかよくわからんのなら買うべき。ただし天然なのか内容が結構ピンボケしてるので、
ある程度理解したら他のソースで情報を補完する必要がある。他に代替となる本がないから「モダンPerl入門」一択なのが現状。
>>891 解決したなら解決方法書け。EUC-JPにはそんな文字ないから文字化けして当たり前。
jcode.pl使ったら解決しましたとかそういうオチじゃないだろうなw
>>895 昨日YAPCで会った米国人が、日本の本屋にPerlの本が異常に少ないのに驚いていたな。
ちなみになる早で1回作って終わりなプロジェクトならPHPでもいいが、保守を続けていくようなプロジェクトはPerl
でかっちり書くのがいい。mixiは置いといて、はてなをPHPで書いてたら今のはてなはなかった。
>>903 Perlのことならもう来てるから。ここんとこPerlの案件激増。PHPの仕事も多いがは糞なのが多く蹴ってる。
908 :
デフォルトの名無しさん :2009/09/15(火) 20:49:32
#!C:\Perl\bin\perl use encoding "cp932"; binmode STDERR, ':encoding(cp932)'; $key = <STDIN>; chomp $key; if ($key ne 'quit') { &print_randomnum; } else { print "owari\n"; exit; } sub print_randomnum{ $num = int(rand 1000000); print "$num\n"; } __END__ こんな簡単なプログラムなのに期待通りに動作しません。 quitと入力しても乱数が表示されてしまいます。どこがおかしいのか教えてください。 使用しているのはActivePerl 5.8.8 on XP Pro SP2です。
automakeがPerl依存か。 一応Pythonにはsconsがあるが、google以外では見ないな。
>>908 use encoding "cp932";
binmode STDERR, ":encoding(cp932)";
の二行消したらなったぞ
912 :
908 :2009/09/17(木) 18:08:55
みなさまご親切にありがとうございます。911さまのご指摘をわたくしも確認しました use encoding "cp932"; binmode STDERR, ":encoding(cp932)"; はウェブ上の入門講座を見て付加しました。 どうしてこの二行がこんなにおそろしい悪夢を招くのかよかったら教えてください。 講座ではシフトJISでコードを書くときに必要と説明していました。
>>912 use encoding(cp932);
とした場合、STDINからの入力値を律儀にCRLF(\r\n)にしてくれる。
でもデフォルトの場合、特殊変数$/(デフォルトの改行文字)はLF(\n)なので、
chompした際に、LF(\n)しか消してくれない。
例 入力:AAA(エンターキー)
use encoding(cp932)あり → 'AAA\r\n'
use encoding(cp932)なし → 'AAA\n'
となる。
ちなみに、(binmodeなしで)入出力時に\n←→\r\nになるのは、ActivePerl(Winのみ?)
のIOのデフォルト動作。
慣れたひとなら \r が来ても \r\n が来ても、どっちでも正しく動作するよう コーディングするもんだよ。
915 :
デフォルトの名無しさん :2009/09/18(金) 00:20:49
916 :
908 :2009/09/18(金) 10:04:45
913さま、ありがとうございました。頭がすっきりしました。
>906 LinuxのGUIアプリならPython依存をそこそこ見るが、コマンドラインだと見ないな
>>620 pl の関連付けを perl.exe から wperl.exe へ変更
wperl.exe は perl.exe と同じ場所にあります
それか、コマンドプロンプトの初期設定がコンパネから出来たような気がする
Perl質問すれなくなった
920 :
デフォルトの名無しさん :2009/11/03(火) 12:52:07
そのくらい自分でたてろよ
勉強中の者ですが 例えば2で割り切れない番目の数値を倍にするって事を やってみたのですが、$countをmap式の中に入れられる物なのでしょうか? 気持ち悪いので入れたいのですがどうすればいいんでしょう? my @input_digbit = (1,2,4,8,16,32,64); my $count; my @result = map { my $input = $_; $count += 1; if ($count % 2) { $input = $input * 2; } else { $input; } } @input_digbit;
気持ち悪がらずに慣れてください
>>921 mapで書けることは大抵foreachでいけるよ
use feature 'state' ; my @h = map { state $c = 0 ; $_ + $c++ } 0 .. 3 ;
>>921 mapを2回することになるけど、どうかな?
my @result =
map $_->[0] % 2 ? $_->[1]*2 : $_->[1],
map [ $_ + 1, $input_digbit[$_] ], 0..$#input_digbit;
>>921 reduceを使うとか?
ちょっとトリッキー?
use List::Util qw(reduce);
my @result = @{( reduce {
[ @$a, $input_digbit[$b] * ( $b % 2 ? 1 : 2 ) ]
} ([], 0..$#input_digbit) )};
よく考えたらこれでいいじゃん はは my @result = map $input_digbit[$_] * ($_ % 2 ? 1 : 2), 0..$#input_digbit;
なるほどいろいろ書き方あるんですね。
>>927 一粒($_)で二度美味しい。目からウロコでした。
やっぱfeature系が入ってくるときれいだよね //とかstateとか欲しい機能満載
930 :
デフォルトの名無しさん :2009/11/13(金) 12:13:39
///
given($hoge){ say "hoge" when 1; say "huga" when 2; } みたいなことがしたかったけどwhenは後置できないんだな
でもお前ら、偉そうなこと言ってfeatureで一番心待ちにしてるのはsayだろ?な? すでにuse feature qw/say/;とかsub say {print shift . "\n"} とかしてるやつ手を挙げろ。
use 5.010; 派
export PERL5OPT=-M5.010 派 exe 'inoreabbrev <buffer> say '. 'print, "\n";'. "<C-O>F," 派
935 :
デフォルトの名無しさん :2010/03/07(日) 23:52:03
( ´・ω・`)
936 :
デフォルトの名無しさん :2010/03/08(月) 00:18:35
(´・ω・`)
937 :
デフォルトの名無しさん :2010/03/08(月) 23:59:23
アクセスした人のポート番号80が空いてるかどうかを調べるにはどうすればいいでしょうか? REMOTE_PORT関数で調べれると思ったのですがうまくいかなくて・・・
>>937 telnetででも80番叩いてみればいいじゃん。
(´・ω・`)
>>937 最近、phpしか触ってないのでperlの方を忘れたけど、phpならこんな感じ。
function is_online($server_ip)
{
$ip = gethostbyname("{$server_ip}");
if ($fp = @fsockopen($ip, 80,$un,$sinn,2)) {
fclose($fp);
return true;
} else {
return false;
}
}
要するに、ソケットをオープンして成功すれば、そのポートが開いてるってこと。
「perl ソケットオープン」
で検索汁
アクセスした人のIPアドレスが12.34.56.78 だった場合
お手元のブラウザで
ttp://12.34.56.78/ (頭にtをつけてね)
ってやってサーバーが見つかりませんってエラーがでたら80番空いてない。
何かしら出てきたら空いてる。
これでどうよ。
>>940 あぁ、ごめん、perlスレだったw
use LWP::Socket;
my($server, $port) = ('localhost', '80');
my $socket = LWP::Socket->new;
$socket->connect($server, $port);
ただ確かめるだけならこんなんでいいんじゃない?
一週間もまえの書き込みに今更・・・
open FILE, "<:encoding(cp932)", $hage; read FILE, my $text, -s FILE; close FILE; みたいなスクリプトで cp932 *以外*のファイルを読んでしまうと cp932 "\xEF" does not map to Unicode at C:\workspace\hoge\fuga.pl line **. ってワーニングが出ますが、perlスクリプトはそのまま続行してしまいます。 ほんとうは停止してほしいんですけど、 read FILE, my $text, -s FILE or die; としても止まってくれません。 eval { ..... } die if $@; でも止まってくれません。 何か方法があれば教えてください。
>>945 local $SIG{__WARN__} = sub{ die @_ } ;
スクリプトの最初の方にでも突っ込んどけば?
use PerlIO::encoding; use Encode qw[ :fallbacks ]; # 定数の import $PerlIO::encoding::fallback = Encode::DIE_ON_ERR; open ... という風に $PerlIO::encoding::fallback に定数を入れてやると PerlIO で Encode がまずったときの動作を指定することが出来たはず. 定数については Encode の check に書いてあったと思う.
>>946 encoding使わないでdecode_utf8すれば良いんじゃない?
出力でencodeし直せばおけー
perlccがうまく動きません>< だれかこの部分だけでいいから、Cにしてくれ~。 /^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;
951 :
950 :2010/04/15(木) 11:15:49
すまん、やっぱいい
952 :
デフォルトの名無しさん :2010/05/24(月) 01:43:38
953 :
デフォルトの名無しさん :2010/05/24(月) 02:30:38
955 :
デフォルトの名無しさん :2010/06/11(金) 13:46:42
/ ̄ ̄\ / ヽ、. _ノ \ | (●)(●) | | (__人__) | ヨナも そうおもう | ` ⌒´ | | } ヽ } 人_____ノ"⌒ヽ / \ / へ \ ( ヽγ⌒) | \ \  ̄ ̄ ̄\__/
956 :
デフォルトの名無しさん :2010/07/21(水) 22:32:12
クライアントがサーバへファイル名を送り、サーバがそれを検索しそのファイルを送るサーバプログラムはどうかけばいいですか? 初歩的な質問で申し訳ないですが、よろしければご教授ください。
宿題は自分でやれ
>>956 > クライアントがサーバへファイル名を送り、
ieとかでwww.yahoo.co.jp/index.htmlと入れる。
> サーバがそれを検索しそのファイルを送る
apacheがindex.htmlの内容を返す。
つまり、apache のソースを提出すればよろし
959 :
デフォルトの名無しさん :2010/08/05(木) 06:17:40
hosyu age
960 :
デフォルトの名無しさん :2010/08/07(土) 12:37:44
use strict; をすり抜けて、use warnings; で引っかかる 事例って、どんなのがあるの?
あんいにしゃらいずどばりゅうとか?
>>960 暗黙の文字列→数値変換で、文字列が数値以外の文字が含まれてるとき。
> perl -Mstrict -Mwarnings -e 'print int("1a")'
Argument "1a" isn't numeric in int at -e line 1.
1
> perl -Mstrict -e 'print int("1a")'
1
>>962 なるほど・・・
じゃああえてそういう文字列食わせたいときとかは
一時無効にする必要があるわけか
初歩的な質問ですが… use libでパスを複数指定するとエラーになったりしますか? 例えば、 hoge.pmが/home/***/perl5とかに入ってて fuga.pmが/home/***/perl5/i386-freebsdに入ってる時 二つのパスをuse libすると500になります。 かといって片方しかパスを指定しない場合はCan't locateのエラーが出ます。 どうすれば両方のモジュールを使用することが出来るのでしょうか?宜しくお願いします。
>>964 それ多分違うところでエラーでてるかContent-Type吐いてないかパーミッションがおかしいかそんなとこだろ
どうにかしてエラー内容特定汁
#!/usr/bin/perl use lib qw(/home/***/extlib/lib/perl5 /home/***/extlib/lib/perl5/i386-freebsd); use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); use AnyEvent::HTTP; use Coro; print "Content-type: text/html\n\n"; print "hoge"; ↑500が出る /home/***/extlib/lib/perl5/i386-freebsdを残して /home/***/extlib/lib/perl5の部分だけ切り取り ↑Can't locate AnyEvent/HTTP.pm in @INC (... /home/***/extlib/lib/perl5を残して /home/***/extlib/lib/perl5/i386-freebsdの部分だけ切り取り ↑Can't locate loadable object for module Coro::State in @INC (... /home/***/extlib/lib/perl5/i386-freebsd/auto/Coro/Stateを追加 use AnyEvent::HTTP;があると500になるので削除 /home/***/extlib/lib/perl5だとCoroで500が返るので /home/***/extlib/lib/perl5/i386-freebsdに ↑Can't locate loadable object for module Guard in @INC (... /home/***/extlib/lib/perl5/i386-freebsd/auto/Guardを追加 ↑Can't locate common/sense.pm in @INC (...
/home/***/extlib/lib/perl5/commonを追加 ↑変わらずCan't locate common/sense.pm in @INC (...が出る 今この状態です。 もちろん #!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n"; print "hoge"; これはちゃんとhogeが出力されます。 どういった原因が考えられますでしょうか? 2レスに渡り長々とすみません。どうかよろしくお願いします。
968 :
デフォルトの名無しさん :2010/09/16(木) 01:31:37
969 :
デフォルトの名無しさん :2010/09/16(木) 02:31:40
>>966 extlib/ をつくった環境とちがう環境でうごかそうとしたりしてませんか?
/home/***/extlib/lib/perl5/i386-freebsd 以下のディレクトリは環境依存のものがはいっているので、環境がちがうところにコピーしてつかったりはできませんけども。
(ここでいう環境とは OS, アーキテクチャ, -Dusethreads の有無, perl5 のバージョンのことです)
970 :
デフォルトの名無しさん :2010/09/16(木) 02:41:08
>>969 レスありがとうございます!!!
でも俺のレベルだとちょっと理解しきれ無いので、教えてもらった内容に含まれてるキーワードで早速ググッてきます!
>>969 解決しました!
環境が違うってのがどういうことかわかりました!#!/usr/bin/perl環境じゃなくてモジュールをインストールしたperl環境じゃないとダメ…みたいなことですよね?
どうもありがとうございました!
PerlというかDBIで、fetchが最後まで行って終了した時に、 もう一度先頭行からループし直す時どうすればいいのでしょうか? カーソルを先頭行に戻すやり方を教えて下さい。
973 :
perl入門者 :2010/09/26(日) 10:59:18
すいません。 perlで、以下のような処理を実現したいのですが、 作成された方がいらっしゃいましたら、ご教授お願いします。 (1)「javaのプログラム内の全てのコメントを削除」して表示する (2)「javaのプログラム内のコメントのみ」を表示する よろしくお願いします。
正規表現使えばいいのでは?
Javaのコメントはネスト不可なのか でも、もしJavaがコメント内の文字列リテラルとかも認識するなら 正規表現だけでは対応できないよ、多分
とりあえず正規表現を使わないなら 行コメントは簡単だろうけど、ブロックコメントは コメントの中にいるかどうかっていう状態変数を作って 読みこみながら処理していけばいい (コメントの中にいなくて/*にであったらコメントに入る) (コメントの中にいて*/に出会ったとき、コメントの外に出る、みたいな感じで) Javaがコメント内の文字列も認識するなら コメントの中の文字列の中にいるっていう状態変数も作る もっと複雑なことをする予定ならパーサを作るほうが楽
注意すべきは文字列リテラルの中にコメントと同等のシーケンスが入っていた場合。
System.out.println("/*うんこ野郎!*/"); /*どうだ参ったか!*/
Parse::RecDescent で、文字列とコメントとそれ以外を定義
ふーん