Perl строка% s спецификатор пустой контекст для даты в sprintf - PullRequest
0 голосов
/ 05 января 2019

Я принимаю пользовательский ввод и печатаю форматированный вывод.

В моем формате строка% s возвращает, что она находится в пустом контексте, когда я предоставляю ей дату. Поскольку он просто печатает, я предполагаю, что строка подходит для отображения даты.

Это мой код

use strict;
use warnings;

use Time::Piece;

print "Enter item number: ";
chomp( my $item_number = <STDIN> );

print "Enter unit price: ";
chomp( my $unit_price = <STDIN> );

print "Enter purchase date (mm/dd/yyyy): ";
chomp( my $purchase_date = <STDIN> );

my $tp = Time::Piece->strptime( $purchase_date, '%m/%d/%Y' );

print "\n";
print "Item\t Unit\t Purchase\n\t Price\t Date\n";

sprintf( "%-3d\t%.2f\t%s\n", $item_number, $unit_price, $tp );
printf("_______________________________________\n");

Похоже, что% s всегда имеет пустой контекст в sprintf. Если я просто сделаю

sprintf( "%s", $tp );

Я получаю точно такое же предупреждение. Как мне распечатать дату в моем случае в формате sprintf? Или в Perl лучше, чем в sprintf?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Вы используете sprintf(), обратите внимание на s.

Эта функция ничего не выводит, но возвращает отформатированную строку. Но вы ничего не делаете с этой возвращаемой строкой, например, присваиваете ее переменной или передаете другой функции. И это пустой контекст, о котором вас предупреждает Perl.

Возможно, вы хотели printf() (без s) или присваивать результат переменной для дальнейшей обработки.

0 голосов
/ 05 января 2019

sprintf не является функцией на месте и не выполняет никакой печати; он только форматирует строку. Вы можете print или сделать что-то еще с его возвращаемым значением:

print sprintf( "%-3d\t%.2f\t%s\n", $item_number, $unit_price, $tp );

или просто printf напрямую:

printf "%-3d\t%.2f\t%s\n", $item_number, $unit_price, $tp;

Пример прогона:

Enter item number: 456
Enter unit price: 5
Enter purchase date (mm/dd/yyyy): 03/10/1986

Item     Unit    Purchase
         Price   Date
456     5.00    Mon Mar 10 00:00:00 1986
_______________________________________
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...