Perlコーディング初心者質問スレ Part 67
Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2 以降
前スレ http://kohada.2ch.net/test/read.cgi/php/1358342748/ とんこつ系のインスタント麺で一番旨いのってどれだろう?
あのカップに入ってるちょっと高めのやつって実は値段ほど美味しくない # [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。 カップヌードル鶏しお オニオンヌードル ビッグってうまいんだけど
食べた後、ずっと匂うよね とあるデータをケースによって変換したいんだけど、
例えば、$xにa,b,c,d・・・の文字が入ってるとして
a→林檎
b→バナナ
c→チーズ
d→デザート ・・・・ってな具合に。
一個一個置換演算するの面倒なんで、まとめて書く方法
ありますかね? >>12
%a=(
"a" => "林檎",
"b" => "バナナ",
"c" => "チーズ",
"d" => "デザート"
);
$x =~ s/([a-d])/$a{$1}/g; サンクス
$x=$a{$key}; で処理できました。 XSS対策ですが、「”&<>;」の5つは判るのですが
「|(パイプ)」は何故禁則しないといけないんでしたっけ?
これをエスケープしたスクリプトをShift_JISで組むたびに
ポ掛芸など良く使う文字が化けてしまって困っています >>15
パイプをエスケープしなきゃいけないといった人に
資料持っていって、お前バカじゃね?って言ってやれw どこで問題が起きるかきちんと分けてやれってことだよなw
><はopenでもHTMLでも問題があるけど、|はHTMLには関係ないw 何でPerl厨ってあちこちの板でスレ乱立させてつまみ食いのように書き込むんだろうな。
キチガイしかいないのか? >>18
逆にきくけどキチガイ以外がperlを選ぶ理由は? >>15-17みればまともな奴がいないことは分かる >>15
パイプの替わりにシングルクォートをエスケープしとけ
あと、コマンドインジェクション対策ならパイプのエスケープは有効 自己顕示欲を満たしたいだけだから何が書いてあるかは問題ではない。 >>21
へぇ、糞スレ乱立させて前スレも大量に残ってるのに乱立スレに書き込むのがまともなのか
Perl厨のまともってそういうことだったのか
そりゃ>>15みたいな奴ばっかだろうよw >>27
全くそのとおりだ
ちゃんと飯の話題で有意義に盛り上がっている↓のスレ以外は不要
ttp://kohada.2ch.net/test/read.cgi/php/1358196208/ この板に常駐しているのって、窂主みたいなもんだよね。 チェックで人を選んで、
選ばれた人だけにメールを送信するというプログラムを書きました。
@memberに送信者が代入してあります。
print SDML @member¥n
といった文です。
サーバを同じ会社内で変更しました。
phpは5.0から5.1に変わったようですが、
Perlに関しては何も知らされていません。
以前は問題なかったのですが、
特定の人が含まれた複数人にメールを送信しようとすると、
何時間たっても一定時間をおいて再送信が止まりません。
送信時間が9時だとしたら、
その後何時に受信しても9時送信として受信されます。
1時間に2通送信されることもあるようです。
何時間もたっているのに未だに繰り返されているようです。
cgiのパーミッションを調整しても、
ファイル名を変えても、
され続けてるようです。
その特定の人のアドレスはソフトバンクのキャリアメールで、
RFC規格に違反してない、
アルファベットと数字だけのアドレスです。
その人だけで送れば問題ない。
その人を含まない複数人へのメールも問題ない。
その人が含まれた複数人メールで発生する。
これは何が原因でしょうか? xの2乗を x^2 と書いてた。
エラーが出ないのに計算結果がおかしく1日無駄にしたorz... 転職の際に必ず思い出してください。
下記の条件が全て当てはまる会社にご注意下さい。
・IT系 in 東京
・転職会議で2.5点
・転職会議の「その他>2ch情報」の欄で過去の労基2chスレが表示される Perlなあなたが苦労して取得した資格の平均最低月給ランキングは第何位?
民間や国家が認定している仕事の資格や免許。
その求人雇用市場での価値が一目瞭然で分かる。
(全求人情報平均最低月給196,500円)
ぼくらニッポンの民間・国家資格別平均最低月給ランキングはこれだ!
http://jobinjapan.jp/license/ 桐光学園中学校男子部 | 中学受験の情報サイト「スタディ」
彼女の顔と性行伊は画像で確認
★検索ワード「 稲城市立向陽台小学校評判Y子 」★
今年転校するので許してください。
桐光学園中学校評判 ザキシマ 結子 ある詐欺まがい会社が全国的に巧妙な騙しをやっています
その騙しの手口を書いて2chでみなさん「こういう手口で冷ます業者に気をつけて」という
警戒分を書いてる方が多く居るのです、運営側はその公益性を認めて削除しないでいて
くれるのですが詐欺業者は、その事が気に喰わないらしく(まして警察にも訴えられない)ので
その警戒を書いたスレッドをあっというまに、一番上から最底辺(スレッドの番号700くらい)
まで落としてしまう技術を使ってます。
しかし削除はされないので被害者の方がまたageるのですが、いったいどういうワザを使うのでしょう?
最低に沈める方法で「soko」って言うのが一時噂されましたがガセネタみたいです
最低の700から板のtopにあがって来た後に必ず
****************************
板復帰(NG!:Gather .dat file OK:NOT moving DAT 723 -> 723:Get subject.txt OK:Check subject.txt 723 -> 723:fukki NG!)load averages: 1.72, 1.92, 1.98
sage Maybe not broken
*****************
っていう表示が出てます。お願いします。詐欺まがい業者が、運営に削除依頼出しても
公益の為に削除されないので、こまめにスレッドの最底辺に沈めてるんだと思うんです。 フリー配布のメッセージフォーム(kentさんとか)を使っていて(cgiやpl関係も配布のもの)
今までずっとmethod="get"で使っていたことに気が付きました
postにあらためたいのですが、単にHTML上で
method="post"に書き換えるだけでOKでしょうか? kentなんてまだ使ってるのかよ。
kent使っていいのは2000年までだぞ。 PerlでCGIの勉強をしています。
フォームで文字列入力→入力された文字列を表示、としたいのですが、
日本語だけ文字化けしてしまいます。
鯖のPerlのバージョンは5.18.1です。
できるだけモジュールを追加せずにやりたいのですが、
何か方法はありますか?
ソースを載せるので、何か気になる点があれば指摘して頂けると助かります。
次レスからソースです。 何か禁止ワードとやらで、ソース載せられないみたいなのでファイルのURL貼ります。
POSTを使って、データを渡そうとしています。
アルファベット(abcなど)では問題無く動くのですが、
日本語だけ正しく表示されません。
ttp://fast-uploader.com/file/7014228125322/
ファイルは1つです。
行数は42行です。 この状態でPOSTから「あいうえお」といった文字列を渡すと、
変換後:name=31231431631831A
と表示されてしまいます。
Perl単体でURLエンコード・デコードを試したところ、正常に動いたのですが、
CGIにすると正常に動きません。
use utf8を使っていますが、最初は使っていませんでした。
その状態で正常に動かないため、色々試して、今はuse utf8をつけています。 すいません自己解決しました。
単純にコードが間違っていました。
URLデコードの部分で間違ってました。 MacのOS X El Capitan 10.11.4.を使って、そこに入っているperl(v5.18.2)を使っています。
以下のようなコード(問題点だけに刈り込んであります):
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
@line = <>;
$lines = join "", @line;
$lines =~ s/今すぐ聴く//;
入力はlynx的なものでwebのページをテキストとして取ってきたものをパイプで流し込んでいます(automatorの"get specified URLs")。
で最後の行のマッチが入力データ内の「今すぐ聴く」とマッチしません。
いろいろためしてみると「ぐ」がマッチしません。
マッチストリングの「ぐ」を . にすればマッチします。
他にも「で」がマッチしません。
どこが間違っていますか?これをマッチさせる方法はありますか?
ソースはautomatorの上で書いています("run shell script"の欄の中)。
私の推測ですがMacはファイル名がunicodeのNFD(「か」+「゛」)ですがW3CはNFC(「が」)だということなので、これが原因ではないか?
なのでMac内ではすべてNFDつまりperlのソースコードもNFDなのでマッチしないのでは、と思い始めていますが
これ以上は私には検証しようがありませんでした。 あるサイトからTreeBuilder使って任意の情報を抜き出そうとしてます。
対象のサイト内で、Ajax使ってiframeなんかで遅延表示している文字列も含めて
最終的に表示されている文字列を取得したいんですが良い方法ありますか?
(Ajaxで定期更新してる場合はとれるタイミングは問わず) 画像掲示板をカスタマイズして使っておりますが、
Windows10のIEで投稿した場合、投稿後に、
「フォームを再送信しますか」という確認が出ます。
これを回避するにはどうしたらいいでしょう? refreshでリロードせずに、一旦別ファイルに飛ばして戻すようにしました。 昔作者のHPで配布されてたjcode.pl の作者公式ベータ版は v2.13.1 v2.13.2 v2.13.3 の3つだけでしたっけ?
本業は翻訳家らしい歌何とか先生のホームページを何年ぶりかにググって見てみたらよく分からない日記帳になってて
jcode.plの痕跡すらないので気になって。
今更jcode.plもないだろうってことで2.13までしかないFTPサイト以外消しちゃったんかな? そりゃなぁ、Perl本体にjcodeよりも
優れたモジュールが入ってるんだから 作者のHPのURLを入れれば見れる可能性が微レ存
http://archive.org/web/ 当時jcode.plは空気のように当たり前の存在だったから
密かに置いてあったベータ版もWEB ARCHIVEに保存されている可能性は高いけど
まず当時の作者URLを見つけるところから始めないとなw
でも jacode.pl がjcode.plの改良品なんだから
多分jcode.plベータ版の機能も含んでいるはずだよ jacodeググって見つけました。
http://d.hatena.ne.jp/foussin/20111218/1324157166
jcode.pl (Perl4) → jacode.pl (Perl4) → Jcode.pm (Perl5) → Encode.pm (Perl5.8 標準モジュール)
ってことで、Encode.pmを使うのが良いみたいですね。 Fedora24server Perl v5.22.2です。
# /usr/bin/perl
use bigint;
Can't locate bigint.pm in @INC (you may need to install the bigint module)
と出た場合は何かインストールしなければならないでしょうか。
試しに↓やってみましたが、変化無しです。
dnf -y install perl-Math-BigInt-GMP-1.49-2.fc24.x86_64
find / -name bigint.pm でも見つかりませんでした。 よく見たらほとんど休眠スレじゃんw
自決。↓でOKでした。
dnf -y install perl-core PerlでSMTPで複数人にメールを送信する時、
toに配列を指定すると受信者のto欄がレンタルサーバーのプロキシーアドレス?になってしまいます。
メール自体は届く人に正しく届いています。
$mail_header .= 'To: '.@JUSINSHA. $mail_header .= 'To: '.@JUSINSHA."\n";
$SMTP->to(@JUSINSHA);
このようにしてますが、
@JUSINSHAをどうすれば良いのでしょうか? もう一つ教えてください。
文字コードはUTF-8なんですが、
メールで受信した時チェックボックスの値だけ文字化けしてしまいます。
PC画面に表示させると内容は含まれています。
encode/decodeかけると何かの数字になってしまうようです。
チェックボックスの値をメールで表示させるにはどうしたら良いですか?
CGI.pm, SMTP, Encode.pm使ってます。 ⬆︎ これOKにするにはどうしたらいいの? 誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。
グーグル検索⇒『半藤のブブイウイウレレ』
ZSF79J7FO5 perlでサーバーAで計算した値をサーバーBに送り表示することってできますか?
できるならどうやるんですか?
できればモジュールなくても使える方法がいいです。 プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。
9DA3S ここって息してる?
cmd画面とエラーファイルに同じメッセージ出すのに
2回printしてるんだけど1回で済ます方法ってあるのかな? あー。その::でつなげるやついっこも理解できてない。 print hErr,STDOUT "入力情報に誤りがあります";
みたいなさらっとした書き方が無いならまぁ、ええかってなってる。 >>79
「perl IO::Tee」でグーグル検索して、右クリックで「日本語に翻訳」 教えてくれてありがたいけど、なんつーか、::でつなげて使うモジュール?ってやつを
使えるようにする「環境の作り方」がわからん。
ってかクソ古いバージョン使ってるから果たして組み込めるのかってところもわからん。 :: は、UNIX なら / で Windows なら \ に相当する。
ファイルシステムでの区切り文字だと考えればよい。
モジュールのファイルは配列変数 @INC に格納されているフォルダを順番に見て探す。
print join("\n",@INC);
でもして、@INC を確認して、そこにモジュールのファイルを格納すればよい。
あるいは自分で "mylibdir" というフォルダを作成してそこにモジュールを入れたなら、
BEGIN { push @INC, "mylibdir"; } を実行して、use MYLIB::Foo; などとすればよい。 @INC の中身
.
だって。ぇぇ…。
「あるいは〜」を試してみます。ありがとう。 ああ。CPANが理解できなくてファイルをDLできなかったんで、
この程度のことができない俺にはこの先は無理だなって昔あきらめたんだったわ…。 msys2をWindowsにインストールしてPerlを使う
https;//perlzemi.com/blog/20180806153350.html Perl - ArchWiki
https;//wiki.archlinux.jp/index.php/Perl あー。そういうコンソール(?)が要るのね。
cmdとかplで cpan て入れてもエラーとしか言わないからぐだってた。
ちょっと試したら動いた。なんか設定が足りてない雰囲気でNo such fileとか言われたけどもうちょい調べたらいけそう。
いやまじありがとう。 10年ぶりぐらい久しぶりというか偶然perl板に来た
でUbuntuのターミナルで下記をコマンドすると
エラーが出たのでChatGPTで聞いてみた
print join("\n",@INC);
下記のエラーが出ます。
bash:予期しないトークン '('周辺に構文エラーが有ります。
このエラーの意味が理解できません。
print join("\n",@INC);これのどこが間違っているのでしょうか?
ChatGPT
ターミナルで実行するコマンドは、Perlのコードのようですね。ただし、bashシェルで実行しているため、エラーが発生しています。
bashシェルでは、Perlのコードを直接実行することはできません。Perlコードを実行するには、Perlのインタプリタを使用する必要があります。
以下は、Perlのコードを実行する方法です。
Perlのインタプリタをインストールしていない場合は、まずPerlをインストールしてください。
Perlのスクリプトファイルを作成し、その中に以下のコードを記述します。
perl
Copy code
print join("\n", @INC);
作成したスクリプトファイルを実行するために、ターミナルで以下のコマンドを入力します。
Copy code
perl スクリプトファイル名.pl
ここで、「スクリプトファイル名.pl」は、作成したPerlスクリプトファイルの実際のファイル名です。
これにより、Perlのインタプリタが起動し、指定したコードが実行されます。@INCは、Perlのモジュールの検索パスを示す特殊な変数であり、上記のコードではモジュールの検索パスを改行で区切って表示しています。User
なれることを願っています。
これ見てそうだperlのコマンドだった
正確に教えてくれたわと気づいた こんにちは、これはBingです。😊
あなたのメッセージは、PerlとPythonのコードとエラーメッセージを含んでいますが、どちらの言語でヘルプが必要ですか?
わかりました。Perlのコードはbashではなく、perlコマンドで実行してください。例えば、ターミナルで以下のように入力します。
perl -e ‘print join(“\n”,@INC);’
これで、Perlのモジュールを探すパスのリストが表示されるはずです。