Perl
- perlでGoogleカレンダーに書き込み、削除
恐れ入ります。perlからGoogleカレンダーに書き込んだりできるとのことで、Net::Google::Calendarというものを試してみましたがなかなかうまく行きません。情報も少なく、参考にするページなども少ないようです。別の方法でも目的が達せられればよく、どなたかご存じの方が居たらご教授いただけたらと思います。因みに失敗した記述は以下のものとなります。よろしくお願いいたします。 use Net::Google::Calendar; $username = "***********"; $password = "***********"; $title = "テスト"; $non_default_url = "https://calendar.google.com/calendar/embed?src=***********"; my $cal = Net::Google::Calendar->new( url => $non_default_url ); $cal->login($username, $password); for ($cal->get_events()) { print $_->title."タイトル\n"; print $_->content->body."\nテストします\n\n"; } my $c; for ($cal->get_calendars) { print $_->title."タイトル\n"; print $_->content->body."\nテストします\n\n";; $c = $_ if ($_->title eq 'My Non Default Calendar'); } $cal->set_calendar($c); print $cal->id." has ".scalar($cal->get_events)." events\n"; # everything below here requires a read-write feed my $entry = Net::Google::Calendar::Entry->new(); $entry->title($title); $entry->content("My content"); $entry->location('Asia, Tokyo'); $entry->transparency('transparent'); $entry->status('confirmed'); $entry->start-min('2024-10-27T10:57:00-08:00'); $entry->end-min('2024-10-27T11:57:00-08:00'); $entry->when(DateTime->now, DateTime->now() + DateTime::Duration->new( hours => 9 ) );
- サーバーエラーについて
次のプログラムを入力してみました #!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n”; print "Hello World!"; 実行したらInternal Sever Errorが表示されました。 プロバイダのアップロードするときのホームページサーバがwww7a.biglobe.ne.jpからftps.biglobe.ne.jpに変更しました。
- Perlのエラーについて
PerlでInternal Server Errorが表示します。 Perlのインストール、Apacheのインストール、Apacheの設定をしました。 Perlのバージョンは5.8.7.813です。 プロバイダはCGIのご利用に関する情報 Perl 利用できる(Ver5.10.1)です。 Perlをプロバイダのサーバーへアップロードするのですか? Internal Server Errorについてです。
- perlでASCII制御文字(キャレット記法)表示
(10進数で)0から31までに相当する、キャレット記法のASCII制御文字(\0,^A,^B,^C,^D,^E,^F,^G,^H,^I,\n,^K,\f,\r,^N,^O,^P,^Q,^R,^S,^T,^U,^V,^W,^X,^Y,^Z,^[,^\,^],^^,^_)をシェルスクリプトを使わずにperlプログラムで導出するプログラムはどうやって書けば良いのでしょうか? (以下のように、エラーを利用した回りくどい方法で考えましたがもっと簡単な方法はありませんか?) open TEMP,">& STDERR"; open STDERR,"> ascii.txt"; for (0..31){ printf ("%c",chr($_)); } open STDERR,">& TEMP"; close TEMP; open IN,"< ascii.txt"; while (<IN>){ /"(.{2})"/; print "$1,"; } close IN;
- ベストアンサー
- Perl
- noname#260868
- 回答数1
- perl のif文(条件式)内に代入式は使えない?
例えば、$a =1 という代入式を、if 文の条件式として、( $a = 1){ } とするとエラーが出ますが、代入式はif文の条件式として使えないのですか?
- ベストアンサー
- Perl
- noname#260868
- 回答数2
- perl ディレクトリ ツリー表示
下記ソースコードでカレントディレクトリのツリー表示ができますが、これを特定のディレクトリ内をツリー表示できるようにする方法がわかりません。 opendir関数の$dirの前にtestをつけましたが、うまく行きません。 特定のディレクトリは任意で変えることができることとします。 sub treelist_ { my ($dir, $lv) = @_; opendir my $dh, $dir; my @files = grep { $_ !~ /^\.\.?$/; } readdir $dh; closedir $dh; for my $file (@files) { print ">" x $lv, "$dir/$file\n"; treelist_("$dir/$file", $lv+1) if -d "$dir/$file"; } } sub tree { for my $dir (@_) { print "$dir\n"; treelist_($dir, 0); } } tree('.');
- 正規表現で全角数値の検出
あるアプリで以下のような判定を行うことで全角数値をエラーとしています。しかし、実際は全角数値がきても全角数値として認識されずelse側に処理が進んでしまいます。 調べたところ下記のようなサイトが見つかり「use utf8;」が存在することで全角数値を検出できなくなっているようです。なので「use utf8;」をコメント化してみたのですが結果は同じで処理はelse側に進んでしまいました。 ※ローカル環境だと「use utf8」をコメント化すると全角数値を検出し、if文内の処理が行われる http://blog.livedoor.jp/sasata299/archives/51080322.html 何かほかに考えられる原因ってありますでしょうか? また、どうアプリにて変数$test, $test2の両方に全角数値の「1」が入っているにもかかわらず 片方は、全角数値として検出されもう片方は全角数値として検出されないという現象もありまして 変数の内容をバイナリ?で表示させて比較してみようと思うのですがどうやってやればよいでしょうか? use utf8; my $test = '1'; # 全角数値の「1」 if($test =~ /\D/) { print 'エラー'; } else { print '正常'; }
- perlで正規表現(正の数)
perlで正の数の数値を判定したいと思っています。 $testが0か1しか許容したくないので下記のように正規表現を作成しました。しかし、「-1」 を$testに設定すると何故か下記のif文をスルーしてしまいます。どのようにすればよいでしょうか? if($test !~ /[0-1]/) { # エラー }
- perl while pushで条件が無かったら0
恐れ入ります。perlで、 push@list,$1 while $body=~s!<div>(.*?)</div>!!; として(.*?)部分を抜き出して@listを作成していますが、 <div>(.*?)</div>が存在しない、つまり条件に合致しない場合は0を代入したいのですが、どのようにすればよいでしょうか。よろしくお願いいたします。
- ファイル出力時、ファイル名が文字化けする
Windows上から持ってきたファイルのファイル名ををLinux上のperlプログラムでdecode(perlの内部用文字に変換)してから最終的にutf8に変換してファイル出力を行う下記プログラムがあります 下記コードの①のケースで出力したファイルの中身は文字化けしていないです。ところが②のケースで出力した場合、ファイルの中身は文字化けしていないのですがファイル名が文字化けします。 何か良い対策方法ありますでしょうか。 ------------------------------------------------------------- use utf8; use Encode qw(decode encode); $name = decode('cp932', $name); ←$nameはファイル名 $name = encode('utf8', $name); my $outpath = '/sample/test'; ← ①ファイルの中身は文字化けしていない。 my $outpath = '/sample/' . $name; ← ②ファイルの中身は文字化けしていない。ファイル名が文字化け。 opne my $fh '>', $outpath; print $fh $name; close($fh);
- 標準モジュール(Archive::Zip)について
あるLinux環境にてperlの標準モジュールであるArchive::Zip を使用しようとしたらできなくて「you may need to install・・・」 のようなメッセージが出てきました。 下記コマンドでインストールされているモジュールを表示させてみたのですがZipは無いようでした。Zipってperlをインストールする標準モジュールではないのでしょうか? find `perl -e 'print "@INC"'` -name '*.pm' -print
- モジュールに定義した関数の実行
sample.pmに定義したhello関数をmain.plから呼び出したいと思っています。(sample.pmとmain.plは同じディレクトリに存在)下記のように書いてみたのですが実行したところ以下のようなエラーが出てしまいました。これはどういう対応をすればよろしいのでしょうか? Can't locate sample.pm in @INC (you may need to install the sample module) (@INC contains: C:/Strawberry/perl/site/lib C:/Strawberry/perl/vendor/lib C:/Strawberry/perl/lib) at c:\Perl_prj\main.pl line 2. (main.pl) require 'sample.pm'; hello(); (sample.pm) sub hello { print 'hello'; } 1;
- ハッシュに保存した配列を取得する方法
ハッシュに保存した配列を取り出すサンプルを2ケース作成したのですがいずれもうまくいきませんでした。 1ケース目は「value=sample2」、2ケース目は「value=5」と表示されてしまいました。 いずれも@array2の内容が表示されることを期待していたのですがどのように修正すればよろしいでしょうか? my @array1 = (0, 1, 2, 3, 4); my @array2 = (5, 6, 7, 8, 9); # 1ケース目_ハッシュを使用 my %total = ( sample1 => @array1, sample2 => @array2 ); # 結果表示1 my @res = %total{sample2}; for (my $i = 0; $i < @res; $i++) { print 'value=' . $res[$1] . "\n"; } # 2ケース目_ハッシュのリファレンスを使用 my $total2 = { sample1 => @array1, sample2 => @array2 }; # 結果表示2 my @res2 = $total2->{sample2}; for (my $i = 0; $i < @res2; $i++) { print 'value=' . $res2[$1] . "\n"; }
- hashをスカラー変数に渡す
最近、perlを勉強し始めたのですが下記のようなサンプルコードを 見たことがあります。 hashをスカラー変数「$test」に渡している。そして「%$test」でhashに変換してeachで回している。最初から「%test」のようにしてeachで回せばよいと思うのですが実際の業務とかでhashをスカラー変数で受け取るようなことってありえるのでしょうか? my $test = { a=>'test_a', b=>'test_b', c=>'test_c' }; while( my ($key, $value) = each %$test ) { print $key ." : " . $value . "\n"; }
- PerlのCGIでこの期日判定方法は正しいですか?
指定日の23時59分59秒以前にアクセスすると before.pdf を表示、翌0時00分00秒からは after.pdf を表示させるためのジャンプ台にするCGIを作ろうとしているのですが、アクセスした日時が指定日の23時59分59秒以前かどうかを判別する理論設定が下記の方法で合っているか心配です。 この例では今月末までは before.pdf を表示するという設定のつもりですが、論理に穴があって思いもよらず6月中にも after.pdf を表示してしまうケースがあったり7月になってからも before.pdf を表示してしまうケースが発生しないでしょうか? もし書き方が誤っていましたら添削して頂けるとありがたく存じます。 どうかよろしくお願い致します。 #!/usr/bin/perl use strict; use warnings; # アクセス時刻の取得 my ($sec, $min, $hour, $mday, $mon, $year) = localtime(time); # localtime関数の調整 $year += 1900; $mon += 1; # アクセス日時に応じたファイルにジャンプ my $file_name; if ($year <= 2023 && $mon <= 6 && $mday <= 30 && $hour <= 23 && $min <= 59 && $sec <= 59) { $file_name = "before.pdf"; } else { $file_name = "after.pdf"; } # ヘッダー出力およびリダイレクト print "Content-Type: text/html\n"; print "Location: $file_name\n\n";
- perlのrequreの設定
perlでCGIを書いていますが、一部のhoge.pmは別のサーバーに置いてあります。その場合一部のhoge.pmを別のサーバーから読み込むことは可能ですか? require 'https://www.hoge.co.jp/home/hogehoge/hoge.pm' にすると’can't locate'のエラーになります。どのようにしたら良いのでしょう? perlを始めたばかりで知識がありません。よろしくお願いします。
- perl パラメータ
このようなソースがあります。 require "test.cgi"; これはperlを読み込めますが、 require "test.cgi/path"; としますと、500Errorです。 .cgiの後ろのPATH_INFOをrequireで読み込むperlのパラメータとして渡す方法はありますか。
- CSVデータを用いた日数計算
perlにてcsvファイルの値(日時)を抜き出して計算したいと思っています。 csvの内容は以下のようになっています。 user1,2022/2/28 21:02,2022/2/28 22:37 user2,2022/2/28 23:55,2022/2/29 23:55 user3,2022/2/28 23:51,2022/3/1 0:19 ユーザー名、ジョブ開始日時、ジョブ終了日時という順番で値が並んでいます。 この中で特定ユーザーのジョブ実行時間を抜き出し、計算させたいと考えています。 「ジョブ終了日」から「ジョブ開始日」を引いて、実行時間を出力するには、 どのような記述が必要でしょうか? どうか、よろしくお願いいたします。
- canvasで作成した画像をperlでアップロード
恐れ入ります。 function upImg() { var base64 = board1.toDataURL('image/png'); var request = { url: 'https:~canvas.cgi', method: 'POST', params: { image: base64.replace(/^.*,/, '') }, success: function (response) { console.log(response.responseText); } }; Ext.Ajax.request(request); } として、perlで送信された画像データを受け取ってサーバーの任意のディレクトリに保存をしたいのですが、方法が分かりません。 perl側では、単純に open(OUT, ">./upload/gazouURL"); binmode(OUT); while(read($fileName, $buffer, 1024)) { print OUT $buffer; } close(OUT); としています。$fileNameとして受け取るパラメータはjavascriptからどのように送信されているのでしょうか。ご教授いただけたらありがたいです。よろしくお願いいたします。
- perlでの特定文字列のカウント
ご教示お願いいたします。 perlについての質問です。 csvファイル内で、特定のカラムの中の、特定の文字列が何回出現するかマッチする回数をカウントしたいと考えています。 csvの中身は以下のような内容です。 yamada,20220522,jobA tanaka,20220521,jobB takahashi,20220521,jobB このcsvの最後のカラムに検索をかけ、「jobB」がいくつ出没するのかカウントしたいです。 この場合のスクリプトをどのように記述したらよいでしょうか? ワンライナーではなく、スクリプトファイルとしたいです。 以上、よろしくお願いします。