Perlについての質問箱 63箱目
レス数が900を超えています。1000を超えると表示できなくなるよ。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://kohada.2ch.net/php/)
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
www.perl.org/get.html
Download Latest Stable Source (5.18.2)
▼前スレ
Perlについての質問箱 61箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/ >>810
Unicode Character 'ATOM SYMBOL' (U+269B)
おいらのPCでは、コピペしてもフォントが対応していないので出てが。 環境によってはどうやってもアトミックにならんのでは 日本だとparameterもargumentもどっちも引数と訳して区別しないから、
何故ARGなのかピンときにくいな 引数は単に引数ってだけ。その使われ方は決まっていない。
例えば言語によっては関数の引数で戻り値を返すことだってできる。
つまり引数=パラメータではない
また関数の引数の多くはパラメータになるが、
引数だけがパラメータではない。
環境変数でパラメータを渡すことも有る
つまり「この関数の引数はすべてパラメータであり、引数以外のパラメータは取らない」
のような使い方をする なぜ $_ が ARGなのかというと
正式名称が「デフォルトの引数」だからである。 そういう理解なんだねとは思うけど、何も正しくない
パラメータは、数学の媒介変数から借りてきた言葉で、
それを変化させると結果がいろいろ変わる変数
argumentは訳語が無いのでアーギュメントとするけど、
これは仮引数とも訳されて、関数を定義する時に便宜的に使われる名前
y = f(a)
と使うけど、定義では
f(x) = x*x
みたいに違う名前で書く
ここで、aがパラメータで、xがアーギュメント 引数として使ってるものが引数
パレメータとして使ってる物がパラメータ パレメータでぐぐると600件くらいヒットするから、
それなりに認知された用語だ たまにいるよな。
大抵のカタカナ英語は日本語風に書いているのに
特定の単語だけネイティブ風に書くやつ
より正確な英語の発音にこだわってるんだー風を
だしていながら、その他のよく知られたカタカナ英語は
そうやってないから、ものすごく恥ずかしい 何言ってんだかさっぱりわかんないな。
これじゃ駄目なん? 普通にパラメータに聞こえますけど。
http://ejje.weblio.jp/content/parameter
元凶は日本のマスゴミなんだから逆らって
アイフォーンをアイフォンとかは全然いいんじゃない? アイフォーンはアイフォーンだろうがゴミ
日本企業の商標を無視するとか朝鮮人かよ 先にアイホンがあったから、アイフォンって名乗れないだけだけどな disableをディセーブルだと判ってるのに、どうしてもディザブルと読んでしまう >>836
お前PCニュース板で荒らしって叩かれてるやつだろw 質問ですが required.plをtest.plからrequire './required.pl'としたとき、
required.plの中でuse strict;と書いてもtest.plがstrictにならないのに
required.plの中でuse CGI;と書くとtest.plでmy $q = new CGI;できてしまうのは何で?
use xxxx;にスコープの違いがあるとして、何読んだらワカル?
ちなPerl 5 (v5.16.1) >>838=ゴミ言語に合理性や整合性を求める知恵遅れ
社会のお荷物だよお前 >>841
レスdくすあり〜
Perl 4時代のCGIをメンテ中なう、、
new CGI;すると何かページの挙動が変わってしまうので結局CGI使わずに調査することにすた、 >>838
そもそも概念が全く違うな
CGI->new が呼び出せるように strict->importは呼び出せるようになっているし
パッケージの定義がグローバルな名前空間に行われてるのは同じ
strictの有効化はコンパイル時のperl内部のスイッチの切り替え
同じ use でもやりたいことが違うからスコープの違いという視点で整理しようとすると混乱しそう 文字列$str2から文字列$str1に含まれている文字以外を全て削除する
例えば$str2="あaかbさcたdなe";$str1="あかさたな";ならば
absdeが残るということです
モジュール使えない環境なのでモジュールなしのやりかたで $str2="あaかbさcたdなe";
$str1="あかさたな";
$str2 =~ s/[^$str1]//g;
print $str2; # あかさたな 正規表現は書けても実行しようとするとむちゃくちゃ遅くなったり
メモリ足りなくなったりして、結局ループに開いたりする あああああああああまははあああああああああああああああああああああなやたはあああああああああああああああなはわたはなたかかなななななああああああああああああああああああああああああああああかかかかあああああああああああああかささやなさはななけなわまややゆか >>846
そのやり方だと
$str2="あaかbさcたdなe";が
$str2="あaかbさcたdなはe";
だったら結果が文字化けする >>847
それは大抵バックトラックのせいだからバックトラックを減らしなさい。
たとえば、単に \s* ではなく (?>\s*) と書く。 Perlは正則言語を最左導出に変換していないとか一体…
まあ一般に状態数が増えてメモリ食うけど ファイルロック用のファイルを使ってロックしている最中に
他プロセスでそのロック用ファイルを削除すると
ロック解除されてしまうの? ロックしているファイルを、他のプロセスは削除できないだろ
試してみれば? 見事にヴァカが釣れたw
腹痛いwwwwwwwwwww 試してみたけどwindowsサーバーだとロック中のファイルは削除できないけど
unixサーバーだと削除できてしまってロックが解除される
だからロック用ファイルは削除しないでそのまんまの方がいい >>859
unixでファイル削除してもロックは解放されない >>860
それどころか同名のロックファイルを作れるから 面倒なバグを生むよな
初心者がほんとによく作るバグが
「ロックを解放したらロックファイルも削除する」 perl6についてスレすらないけどみんな無関心なの? 違う言語だからなあ
そんなんに慣れるくらいなら別の言語やる 使えるとこではPerl使いたいけど
いよいよとなったら次はpythonかなぁ (lock_test1.cgi)
test.lockを排他ロック
sleep(10);
ロック解除
(lock_test2.cgi)
test.lockを削除
test.lockを排他ロック
ロック解除
lock_test1.cgiを実行した3秒後にlock_test2.cgiを実行して試したら
lock_test2.cgiの方はロック待ちにならなかった
test.lockを削除しない場合はロック待ちになった
だからロック用ファイルを削除するとロックが解除される pythonも新バージョンへに移行したくない同じ現象になってて、
次の言語が待たれている
perlからpythonはいろいろ新しいアイディアが追加されて、
より面白い言語になったけど、
次の言語では何が追加されるんだろう >>867
個人的にpythonは3から入ったから、
早く移行完了して欲しいw >>866
それはロック解除されてない
それは、毎回新しくロックファイル作ってロックする方法なら
常にロック出来るというだけ ロック状態を示すファイルを削除したら、その擬似的なロックが、解放されるのは当たり前だとおもうのだけど、結局何がしたいんだ? 基本的なことだったと思うのですが、忘れてしまって調べても見つけられなかったので質問させてください。
print関数のFHのようなスペースを伴わずに渡す第一引数って
* なんていう名前でしたっけ
* どうやって定義するんでしたっけ >print関数のFHのようなスペースを伴わずに渡す第一引数
???
何を指しているのかよくわからないし、定義するってどういうことだ?
print FH "hoge", "fuga";
print "hoge", "fuga"; >>872
自分で定義する関数にprintのFHような渡し方をする引数を定義するということです。
スロットとかいう名前だった気がしたのですが、どうも違うようで あ、スペースを伴わずに、じゃない
カンマを伴わずに… 間接オブジェクト構文
ttp://perldoc.jp/docs/perl/5.8.8/perlobj.pod#Indirect32Object32Syntax
new Hoge 'foo', 'bar';
Hoge->new('foo', 'bar');
普通にメソッドを定義すればよく、呼び出す時の書き方が違うだけ >>875
そうだったー!!
ありがとうございます!!! WWW-Curl-4.17.をインストールしたいと思っています。
perl Makefile.PLを実行して以下のエラーが出力されました。
原因と対応方法が分かる方、ご教示ください。
Locating required external dependency bin:curl-config... found at /usr/local/bin/curl-config.
The version is libcurl 7.19.6
Found curl.h in /usr/local/include/curl/curl.h
No working cpp (ファイルもディレクトリもありません。). Parsing curl.h in Perl at Makefile.PL line 105.
Building curlopt-constants.c for your libcurl version
Building Easy.pm constants for your libcurl version
Building Share.pm constants for your libcurl version
Generating a Unix-style Makefile
Writing Makefile for WWW::Curl
Writing MYMETA.yml and MYMETA.jso そのモジュールのことは知らないけど、とりあえず「cpp が無い」と言ってるようだね。
make と C をインストールすればいいと思うよ。 makeがちゃんとした文法になる日は来るんだろうか 880さん、ありがとうございます。
cppがインストールされていないのですね。。
pkginfoでみるとそれらしいものが入っているのですが、下記とは違うものでしょうか。
# pkginfo -i |grep cpp
system SUNWcpp Solaris cpp
GNOME2 SUNWsigcpp Libsigc++ - a library that implements typesafe callback system for standard
C++
GNOME2 SUNWsigcpp-devel Libsigc++ - a library that implements typesafe callback system for standard
C++ - development files 問題は解決しましたか? Solaris のことは分からないのでこれ以上お役に立てそうにありません。
まだ解決していないのなら perlsolaris というマニュアルがあるはずですから読んでみてください。
その上で、Solaris のことをよく知っている人に聞くのがよろしいかと思います。 ダメですね。。
もうちょっとネットで調べてみます。 流れを切ってすみません。
半角カタカナを全角カタカナにしてファイルに書き込みたいです。
Cannot decode string with wide characters at...
のエラーになります。どこをどう修正すればよいでしょうか。
use utf8; use Encode; use Encode::JP::H2Z;
open(IN, "<:encoding(cp932)", "src.txt");
open(OUT, ">:encoding(cp932)", "dst.txt");
...
#$strはファイルから読み込んだ文字列
Encode::from_to($str, "utf8", "euc-jp"); #どうもここでひっかかる
Encode::JP::H2Z::h2z(\$str);
Encode::from_to($str, "euc-jp", "utf8");
...
といったコードなのですが・・・。
Shift-JISのコードだと上手く動くのですが・・・。
utf8で標準モジュールの利用で行いたいです。どなたかよろしくお願いします。 目的がそれだけなら、こんな感じになるかな。
open( IN,'<','src.txt')
open( OUT,'>','dst.txt')
Encode::from_to( $str,'cp932','euc-jp');
Encode::JP::H2Z::h2z(\$str);
Encode::from_to( $str,'euc-jp','cp932');
どうしてかというと、from_to に渡すのは Perl の用語で言うなら文字列ではなくバイト列。
だから入力時にデコードする必要は無い。
日本語でのパターンマッチなどのためにデコードしてある場合は
from_to ではなく encode を使う。
Encode のマニュアルを読んでください。
標準モジュールしか使えないわけじゃないのなら Unicode::Japanese を使ってみてはどうでしょう。 >886
返信ありがとうございます。
他に日本語の処理があるのでencoding(cp932)としています。
$str=Encode::encode('euc-jp',$str);Encode::JP::H2Z::h2z(\$str);
$str=Encode::decode('utf-8',$str);
としても
#$str=Encode::encode('utf-8',$str);#これの有無に関わらず
$str=Unicode::Japanese->new($str)->h2zKana->get;
(ためしにUnicode::Japaneseを使ってみましたが、標準モジュールで行いたいです)
"\x{xxxx}" does not map to cp932 at ....
とワーニングだらけで>:encoding(cp932)がうまくいっていないというか
それ以前の変換がうまくいっていないようです・・・。 連投すみません。encodeとdecode間違ってるなと思い
$str=Encode::decode('euc-jp',$str);Encode::JP::H2Z::h2z(\$str);
$str=Encode::encode('euc-jp',$str);
とすると、
Wide character in subroutine entry at...
で出力が0バイトとなってしまいます・・・。 何度もすみません。できました。
$str=Encode::encode('euc-jp',$str);Encode::JP::H2Z::h2z(\$str);
$str=Encode::decode('euc-jp',$str);
でした。
> 886
encodeを使うアドバイスありがとうございました。助かりました。 #!/usr/local/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
print <<"EOM";
Content-tyoe: text/html; charset=shift_jis\n\n
<html><body>
EOM
eval {require DBI;};
if($@) {
print "DBI NG<br>\n";
} else {
print "DBI OK<br>\n";
}
undef $@;
eval {require DBD::SQLite; }
if($@) {
print "DBD::SQLite NG<br>\n";
} else {
print "DBD::SQLite OK<br>\n";
}
print "</body></html>";
sqlchk.cgiの19行目の構文エラー。 "){"
と出るんですが何が原因か分かりません。もしよろしければ教えていただけないでしょうか? >>890
eval {require DBD::SQLite; }
の最後に ; が無い APIアクセスでのレスポンスをDumperしたら下みたいに返ってきたんだけど
'https://hogehoge.hoge/'を取得するにはどうアクセスしたらいいです?
$VAR1 = bless( {
'url' => bless( do{\(my $o = 'https://hogehoge.hoge/')}, 'URI::https' )
}, 'Entity::Tag' ); ファイルに書くときに、closeをせず明示的にフラッシュしたいんだけど
どうしたらいいの?
selectやautoflushは明示的ではないのでできれば使いたくない >>900
http://perldoc.jp/docs/perl/perlfaq5.pod#How32do32I32flush47unbuffer32an32output32filehandle63-32Why32must32I32do32this63
> IO::Handle オブジェクトには flush メソッドもあります。
#!/usr/bin/perl -w
use strict;
for (1..10) {
print '.';
sleep 2;
STDOUT->flush;
}
print "!\n"; =~ 正規表現で中身を置換ができる事は理解できたんですが、
中身を入れ替えたいんじゃなく別の変数に入れたいときはどう書けばいいんでしょうか?
現在の自分の知識だと、例えば引数にとった文字列を置換してある変数に入れるとき
$_ = $ARGV[0];
$_ =~ s/mukimuki/mukemuke/;
$hoge = $_;
こんな風に無駄に $_ を経由した書き方になってしまいます。
ほかの言語風に言うと
$hoge = $ARGV[0].replaceWith(s/mukimuki/mukemuke/);
こんな感じで書きたいのですが。 ($hoge = $ARGV[0]) =~ s/mukimuki/mukemuke/;
こう書くのがセオリーかな >>903-904
的確なご回答ありがとうございます。
試してみます。 perlスクリプトの稼働率は今どれくらいなんだろうか?
PHP流行から、徐々にフェードアウトしてるし
PHPオワコン説が流れだした頃から、perl6が登場したけど
存在感がないんだよなー DeNAとかmixiとかがPerIだけど、置き換えが進むだろうし
新規でメインスクリプトでってのはもうなかなか無いだろうね ちょっと何かするときはperl使うよ。慣れてるので何も見ずに書けるから。
phpがなぜ出てくるのかわからん。使ったことないけどあれwebアプリ用でしょ ま、しかし、PerlはWebでしか使われてないわけではないからな。 >>908
多分Webプログラムでの事しか思い浮かばなかったのだろう。 レス数が900を超えています。1000を超えると表示できなくなるよ。