[Perl] ucfirst в кириллице

Discussion in 'PHP' started by apofis, 4 May 2010.

  1. apofis

    apofis New Member

    Joined:
    23 Feb 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Как можно использовать ucfirst с русским текстом?
     
  2. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    use utf8;
     
  3. apofis

    apofis New Member

    Joined:
    23 Feb 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Если текст брать из файла, то не получается.
    Например, если создать текстовый файл с текстом: тестовое слово (и сохранить по умолчанию в кодировке ANSI), то в итоге получается такой текст: тҐ±Іовое слово. Если же созданный текстовый файл сохранить в UTF8, то никаких изменений не происходит вообще.

    Код такой:

    Code:
    use open ":utf8";
    use utf8;
    open (FILE, '<slovo.txt');
    @slovo = <FILE>;
    close FILE;
    $text = ucfirst"@slovo";
    print $text;
    open f, ">ucfirsted.txt";
    print f "$text\n";
    close f;
    <STDIN>;
     
  4. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Вы для начала с кодировкой определитесь. У вас прагмы для utf8, а открываете файл в цп1251
    Исходный текст
    Code:
    тестовое слово
    текст брать из файла
    не получается
    файл с текстом
    
    UTF-8
    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use utf8;
    use open qw /:utf8 :std/;
    
    $\ = "\n";
    open my $F, '<', '82_utf8.txt' or die "open error: $!";
    chomp (my @lines = <$F>);
    close $F;
    @lines = map {ucfirst $_} @lines;
    print join ' : ', @lines;
    
    Вывод
    Code:
    Тестовое слово : Текст брать из файла : Не получается : Файл с текстом
    
    ЗЫ. Если у вас все же кодировка CP1251, то ее и стоит указать либо в прагме open, либо при открытии файла
    Code:
    use open ':encoding(cp1251)';
    open my $FILE, '<:encoding(cp1251)', 'file.txt';
    
     
  5. apofis

    apofis New Member

    Joined:
    23 Feb 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Спасибо)
    Так работает