Question

I have a list of usernames and database names (below). The 39th line is "AHernandez Sample ".

Here is my script code:

use strict;
use warnings;

my $i = 0;
my $n = 13;

while (<>) {
    s/Sample /Sample Basic/ unless ++$i % $n;
    print;
}

Here is how I'm calling the script: perl Test1.txt > Test3.txt.

Here's the odd part. The 39th line, or 4th instance, gets modified by the code. Sample becomes Sample Basic.Then the expected behavior of every 13th instance occurs. Why is the 4th instance of "Sample " being changed and then every 13th thereafter?

admin
AEluf Bane
AEluf PoiznIvy
AEluf MrFreeze
AEluf Demo
AEluf Sample
AEluf Sample_U
AEluf Samppart
AEluf Sampeast
AEluf ASOsamp
AEluf PFPSamp
AEluf SampApp
AGodfrey Bane
AGodfrey PoiznIvy
AGodfrey MrFreeze
AGodfrey Demo
AGodfrey Sample
AGodfrey Sample_U
AGodfrey Samppart
AGodfrey Sampeast
AGodfrey ASOsamp
AGodfrey PFPSamp
AGodfrey SampApp
AGold Bane
AGold PoiznIvy
AGold MrFreeze
AGold Demo
AGold Sample
AGold Sample_U
AGold Samppart
AGold Sampeast
AGold ASOsamp
AGold PFPSamp
AGold SampApp
AHernandez Bane
AHernandez PoiznIvy
AHernandez MrFreeze
AHernandez Demo
AHernandez Sample Basic
AHernandez Sample_U
AHernandez Samppart
AHernandez Sampeast
AHernandez ASOsamp
AHernandez PFPSamp
AHernandez SampApp

Était-ce utile?

La solution

Your script tries to replace with s/// on every 13-th line of the file (13,26,39,52,etc)

https://eval.in/81619

[line: 1; ( 1 % 13)=> 1; try_replace: no] admin
[line: 2; ( 2 % 13)=> 2; try_replace: no] AEluf Bane
[line: 3; ( 3 % 13)=> 3; try_replace: no] AEluf PoiznIvy
[line: 4; ( 4 % 13)=> 4; try_replace: no] AEluf MrFreeze
[line: 5; ( 5 % 13)=> 5; try_replace: no] AEluf Demo
[line: 6; ( 6 % 13)=> 6; try_replace: no] AEluf Sample
[line: 7; ( 7 % 13)=> 7; try_replace: no] AEluf Sample_U
[line: 8; ( 8 % 13)=> 8; try_replace: no] AEluf Samppart
[line: 9; ( 9 % 13)=> 9; try_replace: no] AEluf Sampeast
[line:10; (10 % 13)=>10; try_replace: no] AEluf ASOsamp
[line:11; (11 % 13)=>11; try_replace: no] AEluf PFPSamp
[line:12; (12 % 13)=>12; try_replace: no] AEluf SampApp
[line:13; (13 % 13)=> 0; try_replace:yes] AGodfrey Bane
[line:14; (14 % 13)=> 1; try_replace: no] AGodfrey PoiznIvy
[line:15; (15 % 13)=> 2; try_replace: no] AGodfrey MrFreeze
[line:16; (16 % 13)=> 3; try_replace: no] AGodfrey Demo
[line:17; (17 % 13)=> 4; try_replace: no] AGodfrey Sample
[line:18; (18 % 13)=> 5; try_replace: no] AGodfrey Sample_U
[line:19; (19 % 13)=> 6; try_replace: no] AGodfrey Samppart
[line:20; (20 % 13)=> 7; try_replace: no] AGodfrey Sampeast
[line:21; (21 % 13)=> 8; try_replace: no] AGodfrey ASOsamp
[line:22; (22 % 13)=> 9; try_replace: no] AGodfrey PFPSamp
[line:23; (23 % 13)=>10; try_replace: no] AGodfrey SampApp
[line:24; (24 % 13)=>11; try_replace: no] AGold Bane
[line:25; (25 % 13)=>12; try_replace: no] AGold PoiznIvy
[line:26; (26 % 13)=> 0; try_replace:yes] AGold MrFreeze
[line:27; (27 % 13)=> 1; try_replace: no] AGold Demo
[line:28; (28 % 13)=> 2; try_replace: no] AGold Sample
[line:29; (29 % 13)=> 3; try_replace: no] AGold Sample_U
[line:30; (30 % 13)=> 4; try_replace: no] AGold Samppart
[line:31; (31 % 13)=> 5; try_replace: no] AGold Sampeast
[line:32; (32 % 13)=> 6; try_replace: no] AGold ASOsamp
[line:33; (33 % 13)=> 7; try_replace: no] AGold PFPSamp
[line:34; (34 % 13)=> 8; try_replace: no] AGold SampApp
[line:35; (35 % 13)=> 9; try_replace: no] AHernandez Bane
[line:36; (36 % 13)=>10; try_replace: no] AHernandez PoiznIvy
[line:37; (37 % 13)=>11; try_replace: no] AHernandez MrFreeze
[line:38; (38 % 13)=>12; try_replace: no] AHernandez Demo
[line:39; (39 % 13)=> 0; try_replace:yes] AHernandez Sample BasicBasic
[line:40; (40 % 13)=> 1; try_replace: no] AHernandez Sample_U
[line:41; (41 % 13)=> 2; try_replace: no] AHernandez Samppart
[line:42; (42 % 13)=> 3; try_replace: no] AHernandez Sampeast
[line:43; (43 % 13)=> 4; try_replace: no] AHernandez ASOsamp
[line:44; (44 % 13)=> 5; try_replace: no] AHernandez PFPSamp
[line:45; (45 % 13)=> 6; try_replace: no] AHernandez SampApp

To replace every n-th occurrence of string:

while (<>) {
    ++$i if /Sample /;
    s/Sample /Sample Basic/ unless $i % $n;
    print;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top