アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラム(1)---------------------------------------------------
@youbi = ('日', '月', '火', '水', '木', '金', '土');
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;

open(TIME,">ファイル名");
print TIME "${year}\n";
print TIME "${mon}\n";
---省略---
close(TIME);

プログラム(2)---------------------------------------------------
open(TIME,"ファイル名");
flock(TIME,1);
@time=<TIME>;
close(TIME);

-------------------------------------------------------------
以上のようなプログラムを使い時間を取得したのですが。
printしてみると、「2007 8 24」のように半角スペースが入ってしまいます。chomp();も試してみたのですが、どうにも削除できません。
どうやれば、半角スペースを削除出来るのでしょうか?もしくは、どうやれば半角スペースが入らないように保存、展開できるのでしょうか?

分かり難い質問かとは思いますが、ご返事お願い申し上げます。

A 回答 (3件)

多分


print "@time";

とかやってるんでしょうね。
Perlの配列変数に対する interpolationは
特殊変数 $" の内容をセパレータとして使います。
そしてそのデフォルトの値は ' ' (スペース一個)です。

$LIST_SEPARATOR
$" This is like $, except that it applies to array and slice values
interpolated into a double-quoted string (or similar interpreted
string). Default is a space. (Mnemonic: obvious, I think.)

interpolationに頼らないようにするのが一番でしょう。

#!/usr/bin/perl
# -*- coding: utf8 -*
use strict;
use warnings;

my @ary = (2007, 8, 24);

print "@ary\n";

$" = ':';
print "@ary\n";

$" = '';
print "@ary\n";

print join('', @ary), "\n";

実行結果:
2007 8 24
2007:8:24
2007824
2007824
    • good
    • 0

すみません一つ忘れていました。


ベタに配列の内容を出力するなら

print @ary;

で十分だったりします。
先の例に付け加えといてください。
    • good
    • 0

書かれているのは保存部分と、保存したデータから配列に読み込んでいるところまでですね。


このスクリプト内では特に問題はありません。

たとえば
print "$time[0]$time[1]$time[2]";
とすれば 2007824 と表示されませんか?

表示部分のコードがないので、何が原因か分かりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!